1

過去6か月間にどのドライバーが燃料を購入していないかを調べる必要があります。

TransactionReport(過去6か月のすべてのトランザクション)とDriverList(すべてのドライバー)の2つのテーブルがあります

TransactionReport
DriverID  |  DriverLastName | DriverFirstName | Other Columns not used for this query

DriverList
DriverID  |  DriverLastName | DriverFirstName | Other Columns not used for this query

TransactionReportにリストされていないDriverListにリストされているすべてのDriverIDを返したいのですが。

結果は私に次のように見えるはずです

DriverID  |  DriverLastName | DriverFirstName
4

4 に答える 4

3

右側のテーブルでNULLの結果のみを取得する左側の外部結合は機能するはずです

select distinct driverlist.driverid, driverlist.driverlastname, driverlist.driverfirstname
from driverlist
left outer join transactionreport
on driverlist.driverid = transactionreport.driverid
where transactionreport.driverid is null
于 2012-10-26T15:28:46.177 に答える
2
select 
    DriverID, DriverLastName, DriverFirstName

from
    DriverList

where
    DriverID not in (select DriverID from TransactionReport)
于 2012-10-26T15:36:27.763 に答える
1
SELECT dl.DriverID , dl.DriverLastName, dl.DriverFirstName FROM DriverList dl
 LEFT JOIN TransactionReport tr ON  dl.DriverID  = tr.DriverID  
WHERE tr.DriverID IS NULL
于 2012-10-26T15:27:43.623 に答える
0

前述のように実行できます。

Select dl.DriverID , dl.DriverLastName, dl.DriverFirstName From DriverList dl
 LEFT Join TransactionReport tr on  dl.DriverID  = tr.DriverID  
WHERE tr.DriverID is Null

どちらが機能しますか。ただし、アンチセミ結合を使用すると、結果が速くなり、クエリが読みやすくなります。MS Access の以降のバージョンはこれをサポートしているようです:

SELECT dl.DriverID, dl.DriverLastName, dl.DriverFirstName From DriverList dl
WHERE NOT EXISTS (
     SELECT tr.DriverID 
     FROM TransactionReport tr 
     WHERE tr.DriverID = dl.DriverID)

ここで重要なのは、EXISTS ステートメント内の WHERE に注意を払うことです。NOT ロジックは既に EXISTS の前にあるため、ステートメント内で等しいかどうかをテストする必要があります。

于 2012-10-26T15:41:52.247 に答える