处理左连接 SQL 中不匹配行的空值

问题描述 投票:0回答:1

对于问题的第一部分感到抱歉。尝试在第二部分中用示例进行解释。

我有两张桌子a,b。我根据三列连接这两个表,以从表 b 中检索列“描述”。假设这三列是 id、main_cat 和 sub_cat。如果表 a 中有一行包含 id、main_cat 和 sub_cat 的组合,而表 b 中不存在该行,则说明列为空。如何编写查询,以便如果加入后描述列为空,则根据 id、main_cat 值使用表 b 中的列 main_description 作为描述?

示例 让我们用一个例子来说明这一点:

表a:

id  main_cat    sub_cat
1   A           X
2   B           Y
3   A           Z
4   C           W

表b:

id  main_cat    sub_cat   description             main_description
1   A           X     Description 1           Main Description A
2   B           Y     Description 2           Main Description B
4   C           W     Description 3           Main Description C
A                     Main Description A
B                     Main Description B
C                     Main Description C

期望的结果:

id  main_cat    sub_cat          description
1   A           X            Description 1
2   B           Y            Description 2
3   A           Z            Main Description A
4   C           W            Description 3

尝试在 select 语句中使用 COALESCE 和“Case when”但失败。

对于糟糕的措辞和示例结构感到非常抱歉。我不知道还能怎么问。 sql新手,所以问题的框架不是很好。

sql join null
1个回答
0
投票
SELECT  COALESCE(B.OtherDescription, A.Description, 'No Description') 'TheDescription', ISNULL(B.OtherDescription, A.Description) 'No Description2'
    FROM A
        LEFT OUTER JOIN B ON ( A.id = B.id AND A.main_cat = B.main_cat AND A.sub_cat = B.sub_cat )

我认为你根本不应该使用 Case 语句。 ISNULL 可能不适用于所有类型的 SQL,但 COALESCE 在任何地方都应该是相当标准的。

© www.soinside.com 2019 - 2024. All rights reserved.