-5

サッカーとチェスを購読しているがテニスは購読していない従業員の詳細を表示します。

SELECT *
FROM   employee
WHERE  empid IN (SELECT empid
                 FROM   subscription
                 WHERE  facid IN (SELECT facid
                                  FROM   facility
                                  WHERE  facility = 'Chess'
                                          OR facility = 'Football'))
       AND empid NOT IN (SELECT empid
                         FROM   subscription
                         WHERE  facid = (SELECT facid
                                         FROM   facility
                                         WHERE  facility = 'Tennis'));

SELECT DISTINCT empid
FROM   subscription
WHERE  facid IN (SELECT facid
                 FROM   facility
                 WHERE  facility = 'Chess'
                         OR facility = 'Football')
       AND facid != (SELECT facid
                     FROM   facility
                     WHERE  facility = 'Tennis');  

最初のものは正しい結果を与えます。

4

1 に答える 1

5

最初のクエリ: Chess または Football を購読しているが、Tennis を購読していないすべての従業員。

2 番目のクエリ: Chess または Football に加入しているすべての empid です。

2 番目のクエリはサブスクリプションをフィルタリングしており、1 つのサブスクリプションは 1 つの施設にしかリンクできません。つまり、チェスのサブスクリプションを持っている場合、もちろん同時にテニスのサブスクリプションではなく、テニスのサブスクリプションを見つけた場合、それはチェスでもサッカーでもないため、すでに除外されています。ChessとTennisの両方にサブスクライブする EmpID は、Chess のサブスクリプションのために含まれますが、Tennis のサブスクリプションのために除外されることはありません。

于 2012-01-05T09:49:02.443 に答える