ホームページ >データベース >mysql チュートリアル >Table1 と一致する名前を持つレコードを除外して Table2 からレコードを選択するにはどうすればよいですか?
あるテーブルからレコードを選択して別のテーブルからレコードを除外します
質問:
2 つのテーブルがあり、table1 に列 ID と名前が含まれ、table2 に列 ID と名前が含まれている場合、名前の値が table1 にない table2 内のすべての行を取得します。
推奨クエリ (間違っています):
<code class="language-sql">SELECT name FROM table2 -- that are not in table1 already</code>
解決策:
望ましい結果を取得するためのより正確なクエリは次のとおりです:
<code class="language-sql">SELECT t2.name FROM table2 t2 LEFT JOIN table1 t1 ON t1.name = t2.name WHERE t1.name IS NULL;</code>
説明:
このクエリは、左結合を使用して、名前列に基づいて table2 の各行を table1 の対応する行と照合します。 table1 に一致する行が見つからない場合、結果内のその行の t1.name 値は NULL になります。 t1.name が NULL である行のみを選択することで、table1 の名前値と一致する table2 のレコードを効果的に除外します。 あるいは、NOT EXISTS
句を使用して同じ結果を得ることができます:
<code class="language-sql">SELECT name FROM table2 t2 WHERE NOT EXISTS ( SELECT 1 FROM table1 t1 WHERE t1.name = t2.name );</code>
NOT EXISTS
バージョンは、一般に、特に大規模なデータセットの場合、LEFT JOIN
バージョンよりも効率的です。
以上がTable1 と一致する名前を持つレコードを除外して Table2 からレコードを選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。