我可以考虑在Google BigQuery中过滤2种方法。 (比较说Table2很小。)哪种过滤方法更可取,为什么?它取决于table1的大小吗?还是有另一种更好的方法吗?
SELECT
a.ID
FROM
table1 AS a
LEFT OUTER JOIN
table2 AS b
ON
a.ID = b.ID
WHERE
b.ID is NULL
或
SELECT
ID
FROM
table1
WHERE
ID NOT IN (
SELECT
ID
FROM
table2)
答案 0 :(得分:3)
第二个仅限于一个且只有一个要过滤的字段。
首先可以使用多个字段进行过滤,如下所示
SELECT
a.ID
FROM
table1 AS a
LEFT OUTER JOIN
table2 AS b
ON
a.ID = b.ID AND a.Field2 = b.Field2 AND a.Field3 = b.Field3
WHERE
b.ID is NULL
答案 1 :(得分:1)
我测试了两个字段的反连接,差异非常明显。
SELECT fields, ..
FROM inputA A
LEFT JOIN inputB B
ON A.key = B.key AND A.key2 = B.key2
WHERE B.key IS NULL AND B.key2 IS NULL
其表现优于其NOT IN:
SELECT fields, ..
FROM inputA A
WHERE key NOT IN (SELECT NUM_RUT FROM key)
AND key2 NOT IN (SELECT key2 FROM inputB)
在这种情况下,在读取4.6Gb后,BigQuery中的5s和7s。
答案 2 :(得分:0)
第一个总是查询数据库的方式,只是为了扩展Mikhail所说的内容,你也可以在Where下添加AND。
SELECT
a.ID
FROM
table1 AS a
LEFT OUTER JOIN
table2 AS b
ON
a.ID = b.ID AND a.Field2 = b.Field2 AND a.Field3 = b.Field3
WHERE
b.ID is NULL AND a.id=75
如果你在查询开始时使用SELECT DISTINCT,它将只返回不同的值(这将阻止它多次返回相同的项目)