当某个表中的数据不可用时查询
Posted
技术标签:
【中文标题】当某个表中的数据不可用时查询【英文标题】:Query when data is not available in one of the table 【发布时间】:2020-05-31 17:09:12 【问题描述】:我有 2 个表 A 和 B。我在表上使用了左连接,但是当左表 (A) 没有时,我想要查询返回右表值,其列与左表中的空白相同。
我使用了下面的查询,它对我来说工作正常。有没有更好的方法来构建相同的查询以提高性能?
IF EXISTS(SELECT 1 FROM TableA WHERE Project_ID = @Project_ID)
SELECT
A.ID, A.Project_ID, A.Column1, A.Column2,
B.Column
FROM
TableA A
LEFT JOIN
TableB B ON A.Project_ID = B.Project_ID
WHERE
A.Project_ID = @Project_ID
ELSE
SELECT
B.ID, B.Project_ID, '' As Column1, '' As Column2, B.Column
FROM
TableB
WHERE
project_ID = @Project_ID
【问题讨论】:
是什么让您认为性能可以提高?您在寻找更快或更整洁的产品吗? 【参考方案1】:如果我理解正确,你想要一个full join
:
select A.ID, A.Project_ID, A.Column1, A.Column2, B.Column
from (select a.*
from TableA a
where A.Project_ID = @Project_ID
) a full join
(select b.*
from TableB b
where b.Project_ID = @Project_ID
) b
on a.Project_ID = b.Project_ID;
当使用full join
s 进行过滤时,我通常发现使用子查询最明智。
【讨论】:
在这个示例中很难快速看到展示位置的“完全连接”。【参考方案2】:你应该使用全连接:
SELECT
ISNULL(A.ID,B.ID) AS ID
,ISNULL(A.Project_ID, B.Project_ID) AS Project_ID
, A.Column1, A.Column2, B.Column
FROM
TableA A
FULL JOIN
TableB B ON A.Project_ID = B.Project_ID
WHERE
isnull(A.Project_ID ,B.Project_ID) = @Project_ID
【讨论】:
以上是关于当某个表中的数据不可用时查询的主要内容,如果未能解决你的问题,请参考以下文章
Android WifiP2p - 当发现的设备不可用时收到通知
使用适用于 iOS 的 XMPP 框架:当订阅者可用/不可用时接收状态
如何修复 PWA 审核中的“当 JavaScript 不可用时不提供后备内容”?