仅当表不为空时,T-SQL 才连接表

Posted

技术标签:

【中文标题】仅当表不为空时,T-SQL 才连接表【英文标题】:T-SQL join table only when the table is not empty 【发布时间】:2013-01-07 11:36:38 【问题描述】:

我有以下表格,其中有一列 (RecordID):

TableOne
101
102
103
104
105
106

TableTwo
101
102
103
104

并且只有在 TableTwo 不为空时才想在它们之间进行连接。这可以通过示例 IF 语句来完成,但在我的实际情况下,这会导致大量代码重复。

我尝试了以下方法:

SELECT * FROM
TableOne T1
WHERE exists (select 1 from TableTwo where T1.RecordID=RecordID)
      and exists (select 1 from TableTwo)

使用这个answer ,但同样的逻辑对我不起作用 - 它仅在第二个表不为空时有效,如果为空,则不返回任何内容。

有谁知道这是否可行?

【问题讨论】:

您能提供估计的结果集吗? 【参考方案1】:

如果TableTwo 中没有行,我假设您想全选。你需要一个ORNOT EXISTS

SELECT 
   T1.* 
FROM
   TableOne T1
WHERE 
   EXISTS(SELECT 1 from TableTwo WHERE T1.RecordID=RecordID)
   OR NOT EXISTS(SELECT 1 FROM TableTwo)

SQL-Fiddle

【讨论】:

以上是关于仅当表不为空时,T-SQL 才连接表的主要内容,如果未能解决你的问题,请参考以下文章

MSSQL - 仅当所有值都不为空时才插入值

JPA:仅当结果集不为空时才缓存查询

仅当对象在一行上不为空时才设置属性[重复]

仅当字段不为空时才进行电子邮件验证

仅当查询不为空时,才从查询写入 BigQuery 中的表

仅当搜索框不为空时才显示项目匹配内容