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

2020-10-07 15:03发布

表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

标签: SQL 结合
3条回答
劫难
2楼-- · 2020-10-07 15:28

这次用到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

查看更多
Fickle 薄情
3楼-- · 2020-10-07 15:39

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

SELECT *
FROM table1
LEFT JOIN table2
    ON table1.column1 =  table2.test2
WHERE
    table2.test1 = 001
查看更多
我想做一个坏孩纸
4楼-- · 2020-10-07 15:41

试下子查询吧

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

查看更多
登录 后发表回答