如何覆盖另一个表中的行?

Far*_*han 0 sql sql-server select join subquery

我有两张桌子:

表A

ID  Name
--  ----
1   aaa
2   bbb
3   ccc
4   ddd
Run Code Online (Sandbox Code Playgroud)

表B

ID  Name
--  --------
3   WWXXYYZZ
Run Code Online (Sandbox Code Playgroud)

我想从两个表中进行选择,但跳过 TableB 中存在的行。结果应该是这样的:

ID  Name
--  --------
1   aaa
2   bbb
3   WWXXYYZZ
4   ddd
Run Code Online (Sandbox Code Playgroud)

我已经尝试过unionjoin但不知道如何实现这一目标。

-- Did not work
select *
from TableA
union
select *
from TableB

-- Did not work
select *
from
(
    select *
    from TableA
) x
join
(
    select *
    from TableB
) y
on x.ID = y.ID
Run Code Online (Sandbox Code Playgroud)

Mur*_*nik 5

您可以将 join 保留b在 to 上a,并使用coalescePreferredb的行:

SELECT    a.id, COALESCE(b.name, a.name) AS name
FROM      a
LEFT JOIN b ON a.id = b.id
Run Code Online (Sandbox Code Playgroud)