我试图用 SQL 表达这个想法
If record exist in A then return record else if record exist in B return record ELSE NULL
示例:选择队长(如果存在),否则选择队中最年长的球员
WITH Captains_CTE (TeamName, PlayerName)
AS (
SELECT TeamName, PlayerName FROM TeamPlayer WHERE IsCaptain = 1
),
OldestPlayer_CTE (TeamName, PlayerName)
AS (
SELECT TeamName, PlayerName FROM TeamPlayer AS tp
INNER JOIN (
SELECT TeamName, MAX(PlayerAge) AS MaxAge
FROM TeamPlayer
GROUP BY TeamName
) AS old ON old.TeamName = tp.TeamName AND old.MaxAge = tp.PlayerAge
)
SELECT CASE
WHEN Captains_CTE.TeamName IS NULL THEN OldestPlayer_CTE.TeamName
ELSE Captains_CTE.TeamName
END AS TeamName,
CASE
WHEN Captains_CTE.PlayerName IS NULL THEN OldestPlayer_CTE.PlayerName
ELSE Captains_CTE.PlayerName
END AS PlayerName
FROM Captains_CTE
FULL OUTER JOIN OldestPlayer_CTE ON Captains_CTE.TeamName = OldestPlayer_CTE.TeamName
我可以通过对 A 和 B 进行外连接,然后为我希望返回的每一列构建一个 CASE 语句来做到这一点,但必须有更好的方法。 (是的,我的示例查询对年龄的唯一性做出了一些可怕的假设)
最佳答案
使用不存在
:
select a.*
from a
union all
select b.*
from b
where not exists (select 1 from a where a.? = b.?); -- "?" is for the column that specifies whether the record exists in A
关于sql - 如果记录存在于 A 中则返回记录,否则如果记录存在于 B 中则返回记录,否则返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57581615/