-1

LEFT JOINあるテーブルに存在し、他のテーブルに存在するレコードを検索するクエリを作成する必要があります (左結合の標準的な使用法)。このテーブルには、結合用のテーブルが 1 つだけあります。

テーブル名:products

結合条件列:prdname

2 つの where 句の条件:subdivision='abc', subdivision='xyz'

目的

これらの 2 つの where 句を使用すると、2 つのセットの prdname を含む 2 つの結果が得られます。一方には存在するが、他方には存在しない prdname を見つける必要があります。


私が標準を書いたときLEFT JOIN(以下のケース 2)、間違った結果が得られなかったので、結果を確認するためにサブクエリを書きました。8 レコードだったので、ここでクエリを case1 に変更することにしましたが、うまくいきました。

私の疑問は、どちらもほとんど同じであるのに、なぜ2番目が間違っているのでしょうか?

誰でも私を助けることができますか?

また、abcxyzはランダムな値なので、かなり気にします。

動作しているケース:

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') 
4

1 に答える 1