如何从一个表中获取所有记录并查看它们是否在没有子查询的情况下在另一个表中使用

Van*_*212 5 optimization subquery

我正在尝试编写一个 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
Run Code Online (Sandbox Code Playgroud)

用户可以将任意数量的合约应用到一个订单,所以我需要做的是获取所有合约的列表,并查看它们是否按特定顺序使用。现在,我使用子查询来完成工作,但如果不需要,我不喜欢使用子查询。

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'
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望得到一个如下所示的结果集,如果 OrderID 列中的值为 NULL,则表示未使用它:

UserContractId  |  UserContractName  |  OrderID
-----------------------------------------------
36              |  test              |  466
37              |  test2             |  NULL
38              |  test3             |  NULL
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏。谢谢!

ype*_*eᵀᴹ 13

您可以使用 aLEFT 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' ;
Run Code Online (Sandbox Code Playgroud)