我无法想出语法来按联合顺序获取结果。我所追求的是,如果第一个并集有结果,它必须出现在第一个,如果第二个并集有结果,它必须出现在第二个,依此类推。
select a.id, a.id2
from Table1 a
where a.id3=(select c1.id1 from table c1 where c1.name='A') --Must be first result
UNION
select distinct a.id, a.id2
from Table1 a
where a.id3=(select c2.id2 from table c2 where c2.name='B')--Must be second result (if exists)
UNION
select distinct a.id, a.id2
from Table1 a
where a.id3=(select c3.id3 from table c3 where c3.name='C')--Must be 3rd result (if exists)
Run Code Online (Sandbox Code Playgroud)
现在,如果第二个联盟没有结果,则第三个联盟将是第二个。有人可以指导吗?
我觉得你把这件事搞得太复杂了。难道你就不能JOIN和它的table专栏吗?ORDER BYname
SELECT T1.id,
T1.id2
FROM dbo.Table1 T1
JOIN dbo.[Table] T ON T1.id3 = T.id
WHERE T.Name IN ('A','B','C')
ORDER BY T.Name ASC;
Run Code Online (Sandbox Code Playgroud)
如果最终可能有多个JOINs 那么您可以使用聚合,而不是DISTINCT:
SELECT T1.id,
T1.id2
FROM dbo.Table1 T1
JOIN dbo.[Table] T ON T1.id3 = T.id
WHERE T.Name IN ('A','B','C')
GROUP BY T1.id,
T1.id2
ORDER BY MIN(T.Name) ASC;
Run Code Online (Sandbox Code Playgroud)