LEFT JOIN
あるテーブルに存在し、他のテーブルに存在するレコードを検索するクエリを作成する必要があります (左結合の標準的な使用法)。このテーブルには、結合用のテーブルが 1 つだけあります。
テーブル名:products
結合条件列:prdname
2 つの where 句の条件:subdivision='abc', subdivision='xyz'
目的
これらの 2 つの where 句を使用すると、2 つのセットの prdname を含む 2 つの結果が得られます。一方には存在するが、他方には存在しない prdname を見つける必要があります。
私が標準を書いたときLEFT JOIN
(以下のケース 2)、間違った結果が得られなかったので、結果を確認するためにサブクエリを書きました。8 レコードだったので、ここでクエリを case1 に変更することにしましたが、うまくいきました。
私の疑問は、どちらもほとんど同じであるのに、なぜ2番目が間違っているのでしょうか?
誰でも私を助けることができますか?
また、abc
とxyz
はランダムな値なので、かなり気にします。
動作しているケース:
SELECT a.prdname
FROM products a
LEFT OUTER JOIN (SELECT prdname
FROM products
WHERE subdivision = 'xyz') b
ON a.prdname = b.prdname
WHERE a.subdivision = 'abc'
AND b.prdname IS NULL
うまくいかないケース
SELECT DISTINCT( a.prdname )
FROM products a
LEFT OUTER JOIN products b
ON a.prdname = b.prdname
WHERE a.subdivision = 'abc'
AND b.subdivision = 'xyz'
AND b.prdname IS NULL
テストするサブクエリクエリ
SELECT DISTINCT( prdname )
FROM products
WHERE subdivision = 'abc'
AND prdname NOT IN (SELECT DISTINCT prdname
FROM products
WHERE subdivision = 'xyz')