Select * 来自(如果不存在 () else )
Select * from (if not exists () else )
如何用条件的结果加入一个 table?
- 第一个查询获取了 Table1
中的所有信息
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
- 因此,我需要一个通用的 table,它具有 Table 1 中的所有列和 Table 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
您可以使用 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;
此 returns 排在 table 2 中,优先选择所需的状态。
如何用条件的结果加入一个 table?
- 第一个查询获取了 Table1 中的所有信息
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
- 因此,我需要一个通用的 table,它具有 Table 1 中的所有列和 Table 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
您可以使用 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;
此 returns 排在 table 2 中,优先选择所需的状态。