Optimization
如何從一個表中獲取所有記錄並查看它們是否在另一個沒有子查詢的情況下使用
我正在嘗試編寫一個 SQL 語句,從一個表中提取所有記錄並查看它們是否在另一個表中使用。SQL 不是我最擅長的語言,所以我確信這是一個非常簡單的查詢。這是我的兩張表:
tblOrderContracts -------------------------------------- OrderContractID | bigint OrderID | bigint UserContractID | bigint UserName | varchar OrderContractDateCreated | datetime OrderContractStatus | varchar tblUserContracts ------------------------------------- UserContractId | bigint UserName | varchar UserContractName | varchar UserContractFileName | varchar UserContractDateCreated | datetime UserContractStatus | varchar
使用者可以將任意數量的合約應用於訂單,所以我需要做的是獲取所有合約的列表,並查看它們是否在特定訂單中使用。現在,我使用子查詢來完成工作,但如果不需要,我不喜歡使用子查詢。
SELECT uc.UserContractId, uc.UserContractName, (SELECT oc.OrderID FROM tblOrderContracts as oc WHERE uc.UserContractID = oc.UserContractID AND oc.OrderID = 466 AND OrderContractStatus = 'Active') FROM tblUserContracts as uc WHERE uc.UserName = 'vandel212' AND UserContractStatus = 'Active'
理想情況下,我希望得到一個如下所示的結果集,如果 OrderID 列中的值為 NULL,則表示未使用它:
UserContractId | UserContractName | OrderID ----------------------------------------------- 36 | test | 466 37 | test2 | NULL 38 | test3 | NULL
任何幫助是極大的讚賞。謝謝!
您可以使用 a
LEFT JOIN
來獲得相同的結果。注意WHERE
子查詢的條件是如何移動到連接ON
子句的:SELECT uc.UserContractId, uc.UserContractName, oc.OrderID FROM tblUserContracts AS uc LEFT JOIN tblOrderContracts AS oc ON uc.UserContractID = oc.UserContractID AND oc.OrderID = 466 AND oc.OrderContractStatus = 'Active' WHERE uc.UserName = 'vandel212' AND uc.UserContractStatus = 'Active' ;