我有两张桌子,例如:
table_1 table_2
ID CODE ID CODE
aa r qq r
aa k ff k
aa s aa r
bb r aa k
bb k aa s
cc r bb r
dd r bb k
dd k bb s
ee s cc k
cc s
我需要垂直连接它们,从 table_1 中获取所有行,并仅从 table_2 中获取 ID 等于 table_1 的行。但从这些行中仅获取 table_1 的相应 ID 中不存在 CODE 的行。 基本上是这个结果:
ID CODE
aa r
aa k
aa s
bb r
bb k
cc r
dd r
dd k
ee s
bb s
cc k
cc s
解决方案
#standardSQL
SELECT *
FROM table_1
UNION ALL
SELECT ID, CODE
FROM table_2 t2
WHERE EXISTS (
SELECT 1
FROM table_1 t1
WHERE t2.ID = t1.ID
AND t2.CODE NOT IN ( SELECT CODE FROM table_1 WHERE ID = t2.ID)
);
由@SelVazi 提供给我错误
不支持引用其他表的相关子查询,除非可以取消相关,例如将它们转换为高效的 JOIN
它可以在 mysql 中运行。
帮忙?
这可以使用
EXISTS
: 来完成
#standardSQL
SELECT *
FROM table_1
UNION ALL
SELECT ID, CODE
FROM table_2 t2
WHERE EXISTS (
SELECT 1
FROM table_1 t1
WHERE t2.ID = t1.ID
AND t2.CODE NOT IN ( SELECT CODE FROM table_1 WHERE ID = t2.ID)
);