首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择* from (如果不存在(),否则)

选择* from (如果不存在(),否则)
EN

Stack Overflow用户
提问于 2021-04-19 11:33:12
回答 1查看 955关注 0票数 1

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

  1. 第一个查询从表1

获取所有信息

代码语言:javascript
复制
SELECT ID, Name, Blob From [Table-1]

2)第二个请求检查该值是否为具有所需状态的ID。如果存在,则接受具有所需状态的第一个状态,如果没有这样的状态,则对此ID采取任何第一个状态。

代码语言:javascript
复制
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中的所有列和表2中的值(如果有的话)。我试着通过JOIN来做这件事,但是出了问题。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-19 11:36:41

您可以使用apply

代码语言:javascript
复制
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中的一行,并提供所需状态的首选项。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67161205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档