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)
归档时间: |
|
查看次数: |
491 次 |
最近记录: |