首页 新闻 搜索 专区 学院

SQL 为什么使用join却取不到表1所有的值?

0
悬赏园豆:50 [已解决问题] 解决于 2020-10-07 15:17

表1
column1 column2
1 AAA
2 BBB
3 CCC
4 DDD

表2
test1 test2 test3
001 1 商品1
001 2 商品2

期待结果

test1 test2 column2 test3
001 1 AAA 商品1
001 2 BBB 商品2
001 3 CCC
001 4 DDD

为什么用了join还是取不到表1所有的值?下面是自己尝试写的SQL。
如何能实现期待结果呢?

SELECT
*
FROM
table2
LEFT JOIN table1
ON table2.test2 = table1.column1
WHERE
table2.test1 = 001

EmilyInTokyo的主页 EmilyInTokyo | 初学一级 | 园豆:147
提问于:2020-10-06 14:29
< >
分享
最佳答案
0

这次用到UNION ALL
上面是table2已存在data,下面是table2不存在data。
然后将两个表结合。

SELECT
B.TEST1
,A.COLUMN1
,A.COLUMN2
,TEST1
,TEST3
FROM TABLE1
INNER JOIN (SELECT * FROM TABLE2 WHERE TABLE2.TEST1 ='001') B
ON A.COLUMN1= B.TEST2
UNION ALL
SELECT
B.TEST1
,A.COLUMN1
,A.COLUMN2
,NULL
,NUKLL
FROM TABLE1 A,
(SELECT TEST1,TEST2 FROM TABLE2 WHERE TABLE2.TEST1='001') B
WHERE A.COLUMN1 NOT IN (SELECT TEST2 FROM TABLE2 C WHERE B.TEST1=C.TEST1)
GROUP BY
B.TEST1
,A.COLUMN1
ORDER BY TEST1,TEST2

EmilyInTokyo | 初学一级 |园豆:147 | 2020-10-07 15:13
其他回答(2)
0

要反過來寫才會是你要的結果

SELECT *
FROM table1
LEFT JOIN table2
    ON table1.column1 =  table2.test2
WHERE
    table2.test1 = 001
收获园豆:35
RosonJ | 园豆:4910 (老鸟四级) | 2020-10-06 14:54

没有,也是一样的结果。T_T

支持(0) 反对(0) EmilyInTokyo | 园豆:147 (初学一级) | 2020-10-06 15:06

@EmilyInTokyo:
剛沒看仔細,更正一下
你預想的結果不可能出現
table2.test2這個欄位從頭到尾都沒有3, 4的資料
下面兩筆資料根本就不存在

test1 test2 column2 test3
001 3 CCC
001 4 DDD
支持(0) 反对(0) RosonJ | 园豆:4910 (老鸟四级) | 2020-10-06 15:14

@RosonJ:
是的。
但是我期待他能出现。
如果只用SQL,这种结果可能实现吗?

支持(0) 反对(0) EmilyInTokyo | 园豆:147 (初学一级) | 2020-10-06 15:18

@EmilyInTokyo:
除非你有第三張設定表,包含1, 2, 3, 4的資料
否則只有下列兩種結果
table1為主

test1 column1 column2 test3
001 1 AAA 商品1
001 2 BBB 商品2
3 CCC
4 DDD

table2為主

test1 test2 column2 test3
001 1 AAA 商品1
001 2 BBB 商品2
支持(0) 反对(0) RosonJ | 园豆:4910 (老鸟四级) | 2020-10-06 15:24

@RosonJ:
谢谢你啦,我再考虑考虑。

支持(0) 反对(0) EmilyInTokyo | 园豆:147 (初学一级) | 2020-10-06 15:31
0

试下子查询吧

select '001' as test1, column1, column2, (select test3 from table2 where table2.test2=table1.column1) as test3
from table1

收获园豆:15
大志若愚 | 园豆:2082 (老鸟四级) | 2020-10-07 09:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册