【问题标题】:Select * from (if not exists () else )选择 * from (如果不存在 () else )
【发布时间】:2021-07-13 14:29:13
【问题描述】:

如何将一个表与条件结果连接起来?

  1. 第一个查询获取表 1 中的所有信息
SELECT ID, Name, Blob From [Table-1]

2)第二个请求检查该值是否通过具有所需状态的ID。如果有,则取第一个具有所需状态的状态,如果没有该状态,则取该 ID 的任何第一个。

IF EXIST (select * from [Table-2] where ID = *anyID* and STATUS = *anyStatus*) 
 begin 
    SELECT TOP 1 * from [Table-2] where ID = *anyID* and STATUS = *anyStatus* 
 end 
else 
 begin 
    SELECT TOP 1 * from [Table-2] where ID = *anyID* 
 end
  1. 因此,我需要一个通用表,其中包含表 1 中的所有列以及表 2 中的值(如果有)。 我试图通过 JOIN 来做,但出了点问题
SELECT t1.ID, t1.Name, t1.Blob From [Table-1] as t1
LEFT JOIN 
(
   IF EXIST (select * from [Table-2] where ID = *anyID* and STATUS = *anyStatus*) 
     begin 
        SELECT TOP 1 * from [Table-2] where ID = *anyID* and STATUS = *anyStatus* 
     end 
   else 
     begin 
        SELECT TOP 1 * from [Table-2] where ID = *anyID* 
     end
   ) as t2
ON t1.ID = t2.ID

【问题讨论】:

    标签: sql sql-server database sql-server-2008


    【解决方案1】:

    你可以使用apply:

    SELECT t1.ID, t1.Name, t1.Blob, t2.*
    From [Table-1] t1 OUTER APPLY
         (SELECT TOP (1) t2.*
          FROM [Table-2] t2
          WHERE t2.id = t1.id 
          ORDER BY (CASE WHEN t2.status = ? THEN 1 ELSE 2 END)
         ) t2;
    

    这会返回表 2 中的一行,优先选择所需的状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      相关资源
      最近更新 更多