0

2 つのテーブルから選択する MYSQL クエリがあります。2 番目のテーブルには、必ずしも最初のテーブルと一致する結合 ID があるとは限りません。これらの 2 つを例として使用しましょう。

++++++++++++++++++
table: t1
column: id
column: test_id
column: info

table t2
column: t2id
column: test_id
column: extra_info
++++++++++++++++++

これらの次の行をテーブルに挿入しました(これは現時点ではすべて疑似です)。

insert into t1 values (1, 4, "asd")
insert into t1 values (2, 25, "dfg")
insert into t2 values (1, 25, "123")

現在、私の目標は 2 つのテーブルを結合することですが、結合に問題があります。2 番目のテーブル (t2) に一致する行がないように思われる場合、元のテーブルの結合列を NULL にしますか? なぜこれを行うのですか?クエリの例を次に示します。

SELECT * FROM `t1` LEFT JOIN `t2` ON (`t1.test_id` = `t2.test_id`) WHERE `t1.id` = 1;

一致しても問題はまったくありませんが、何らかの理由で行が存在しない場合、t1 の test_id が NULL として設定されています...私の目標は、結合するものがあればこれら 2 つのテーブルを結合することです。 編集: 結合するものが何もない場合は、すべての t2 列を NULL に設定するか、単に t1 データを返すことによって、t1 からデータを返したいだけです。 サブクエリを実行する必要がありますか? もしそうなら、それは何でしょうか?ありがとう :)

4

4 に答える 4

6

を使用しINNER JOINます。

SELECT * FROM `t1` 
INNER JOIN `t2` ON (`t1.test_id` = `t2.test_id`) 
WHERE `t1.id` = 1; 

JOIN タイプに関するドキュメント: http://dev.mysql.com/doc/refman/5.7/en/join.html

于 2012-05-08T23:41:43.787 に答える
1

それが の定義ですLEFT JOIN。結合の左半分のみが一致する場合でも行を返し、必要に応じて右側を埋めNULLます。

対応する右側がある行のみを取得する場合は、JOIN代わりにjust を使用しLEFT JOINます。

于 2012-05-08T23:42:41.880 に答える
1

結合するときは、「SELECT *」を使用しないことをお勧めします。特に、複数のテーブルに同様の名前の列がある場合は、あいまいさが生じ、意図した結果が得られない可能性があるためです。代わりに次のことをお勧めします。

SELECT t1.*, t2.t2id, t2.extra_info 
FROM `t1` 
    LEFT JOIN `t2` 
    ON (`t1.test_id` = `t2.test_id`)
WHERE `t1.id` = 1;
于 2012-05-08T23:43:37.233 に答える
0

複数の異なるタイプの結合があります。あなたが望むのは、一致する行のみが返される「内部結合」だと思います。http://www.w3schools.com/sql/sql_join.aspをチェックしてください

于 2012-05-08T23:42:34.237 に答える