BigQuery - #standardSQL 为相关子查询提供错误

问题描述 投票:0回答:1

我有两张桌子,例如:

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 中运行。

帮忙?

sql google-bigquery correlated-subquery
1个回答
0
投票

这可以使用

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)
);

mysql 演示

© www.soinside.com 2019 - 2024. All rights reserved.