【发布时间】:2018-04-09 07:46:45
【问题描述】:
所以我有:
带有(不仅是名称 - 多列)的表 A:
| IDA | Name |
|:-----------|------------:|
| 1 | John |
| 2 | Jonas |
| 3 | Carl |
| 4 | Foo |
| 5 | Bar |
| 6 | Dog |
表 B(不仅是名称 - 多列):
| IDB | Name |
|:-----------|------------:|
| 1 | Bob |
| 2 | Lisa |
主表:
| ID | FKtoB | FKtoA |
|:-----------|------------:|------------:|
| 1 | 1 | 4 |
| 2 | | 3 |
| 3 | | 1 |
| 4 | 2 | 6 |
| 5 | | 2 |
| 6 | | 5 |
我的目标是从 MAIN 中选择并更喜欢使用表 B 的数据,但如果不可用,我将使用表 A 的数据。我尝试使用 coalesce 但这没有帮助,因为我不想混合数据,所以如果例如表 B 有一行的数据,那么在这一行中应该没有表 A 的数据。
我的查询看起来像这样:
select
coalesce(b.name, a.name) as surname, coalesce(b.surname, a.surname) as surname
from MAIN m
left join TableA a on a.IDA = m.FKtoA
left join TableB b on b.IDA = m.FKtoB
我的问题是,例如,如果 b.name 被填充,而 b.surname 不是,它会将 b.name 与 a.surname 混合,这在我的情况下是不行的。
【问题讨论】:
-
那么你期望的输出是什么?即使它不起作用,发布您尝试过的内容也对您有好处;你能把edit也写进你的帖子吗?谢谢。
-
你试过
LEFT JOIN吗? -
@Larnu 我添加了我的查询并解释了更多
标签: sql sql-server join coalesce