表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
这次用到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
要反過來寫才會是你要的結果
SELECT *
FROM table1
LEFT JOIN table2
ON table1.column1 = table2.test2
WHERE
table2.test1 = 001
没有,也是一样的结果。T_T
@EmilyInTokyo:
剛沒看仔細,更正一下
你預想的結果不可能出現
table2.test2這個欄位從頭到尾都沒有3, 4的資料
下面兩筆資料根本就不存在
test1 | test2 | column2 | test3 |
---|---|---|---|
001 | 3 | CCC | |
001 | 4 | DDD |
@RosonJ:
是的。
但是我期待他能出现。
如果只用SQL,这种结果可能实现吗?
@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 |
@RosonJ:
谢谢你啦,我再考虑考虑。
select '001' as test1, column1, column2, (select test3 from table2 where table2.test2=table1.column1) as test3
from table1