1

更新 私の元の質問に対するすべての回答をありがとう。しかし、これらのクエリに関連する別の問題があります。テーブルを結合した後、NULLの結果を検索します。以下の例に従って、surname = NULL / surname =''を検索しますが、リンクされていない結果が2つある場合でも、空の結果が返されます。

クエリの例:

SELECT table1.*,table2.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id WHERE table2.surname=NULL

これは0を返します。

何か案は?0を返す理由の背後にあるロジックは理解できますが、これを機能させる方法が必要です(?)

元の質問:質問 に対する回答が見つかりません。おそらく、何を探すべきかわからないためです。

私が抱えている問題は、2つのテーブルを共通のインジケーターで結合したいのですが、共通のインジケーターも存在しないレコードを含めたいということです。

意味がわからないかもしれませんが、以下のコードで説明しようと思います

表1

id | name
1 | John
2 | Michael
3 | Anna
4 | Sue

表2

id | surname
1 | Doe
2 | Anderson

したがって、次のようにテーブルを出力/バインドするクエリが必要です。

table1.id | table1.name | table2.id | table2.surname
1 | John | 1 | Doe
2 | Michael | 2 | Anderson
3 | Anna | NULL | NULL
4 | Sue | NULL | NULL

したがって、データがある場合はマージし、データがない場合はマージしないでください(またはNULL値を追加します)。table2は常にtable1よりもデータが少ないため、table1をボーンとして使用できます。vlookupはExcelでこれを完全に実行し、値が見つからない場合はN / Aを返します。PHPでこれを実現する方法は知っていますが、50kをはるかに超えるレコードを処理するときに、コードを高速化しようとしています。別のテーブル列のすべての行に単一のクエリを実行します。

WHERE table1.id = table2.idを試しましたが、table2.idが存在する場合にのみ結合し、JOIN ON関数も試しましたが、同じように動作します。

助けてください

4

3 に答える 3

2

Maybe use LEFT JOIN.

SELECT *
FROM table1
LEFT JOIN table2 ON table1.id = table2.id

See this excellent Jeff Atwood's post.

于 2012-07-13T13:42:20.787 に答える
0
SELECT * FROM table1 LEFT JOIN ON table2 WHERE table1.id = table2.id;

これを試しましたか?

于 2012-07-13T13:42:29.690 に答える
0

笑。他の誰かが私を助けてくれるような方法で質問を書くと、私はそれを理解することが時々あります....私は4時間以上この解決策を探していましたが、それを書いている間私は初期のコースで左/右結合について何を言っているのかを考え始めました...

ええと...私が誰かの時間を奪ってしまったらごめんなさい:)

他の誰かが疑問に思っている場合の正しいクエリは次のとおりです。

SELECT table1.*,table2.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id
于 2012-07-13T13:47:51.147 に答える