【发布时间】:2016-10-24 10:08:53
【问题描述】:
我有两个问题。
第一次查询
SELECT A.ID1, A.ID2, B.ID3, B.approved FROM A INNER JOIN B ON A.ID2 = B.ID2
这是结果:
ID1 ID2 ID3 approved
ABC A01 B01 5
ABC A01 B03 7
ABC A01 B05 11
DEF A02 B05 50
DEF A02 B06 50
第二次查询
SELECT C.ID1, C.ID3, C.requested FROM C
这是结果:
ID1 ID3 requested
ABC B01 10
ABC B02 20
ABC B03 30
ABC B04 40
ABC B05 50
DEF B02 99
DEF B05 88
DEF B01 77
DEF B06 66
这是我的预期结果:
ID1 ID2 ID3 requested approved
ABC A01 B01 10 5
ABC A01 B02 20 0
ABC A01 B03 30 7
ABC A01 B04 40 0
ABC A01 B05 50 11
DEF A02 B05 88 50
DEF A02 B06 66 50
DEF A02 B01 77 0
我的查询未显示预期结果:
SELECT
C.ID1, C.ID3, C.requested,X.approved
FROM
C
INNER JOIN (
SELECT
A.ID1, A.ID2, B.ID3, B.approved
FROM
A
INNER JOIN
B
ON
A.ID2 = B.ID2)X
ON C.ID3 = X.ID3
编辑: 使用 Tim 解决方案时,结果如下:
ID1 ID2 ID3 requested approved
ABC A01 B01 10 5
NULL NULL B02 20 0
ABC A01 B03 30 7
NULL NULL B04 40 0
ABC A01 B05 50 11
NULL NULL B02 99 0
NULL NULL B01 77 0
DEF A02 B05 88 50
DEF A02 B06 66 50
NULL NULL B01 77 0
当我使用 Order By 时,NULL 被分组。不知道哪个NULL属于哪个ID1或哪个ID2
【问题讨论】:
-
加入所有 3 列
-
我知道的任何联接操作都无法实现您的更新结果。
-
为什么
ABC B02 20出现在结果集中而不出现DEF B01 77? -
@TimBiegeleisen 啊,是的。 DEF B01 77 也应该出现。
-
所以基本上,我想为未批准的项目显示已批准 = 0(未出现在第一个查询中)