问题描述
我想删除表 t1 中存在于表 t2 中的所有行。
table_1 is as follows
a b c
1 4 3
3 334 3
5 4 5
6 5 4
4 85 3
7 332 54
8 46 6
45 42 5
7 576 6
表2如下
a b c
7 332 54
3 334 3
7 576 6
如前所述,我想删除表 t1 中存在于表 t2 中的所有行。
所以我使用了代码
DELETE `projectname.datasetname.table1` t
WHERE t IN (SELECT * from `projectname.datasetname.table2`)
但它不起作用,这里的理想解决方案是什么? 我想要的结果是
a b c
1 4 3
5 4 5
6 5 4
4 85 3
8 46 6
45 42 5
谢谢
解决方法
如果需要查看整个记录,可以使用:
DELETE `projectname.datasetname.table1` t
WHERE EXISTS (SELECT 1
FROM `projectname.datasetname.table2` t2
WHERE TO_JSON_STRING(t2) = TO_JSON_STRING(t)
);
但是,通常对某种简单的 id 列进行比较通常足以进行此类比较。
,在下面使用
DELETE `projectname.datasetname.table1` t
WHERE TO_JSON_STRING(t) IN (SELECT TO_JSON_STRING(t) from `projectname.datasetname.table2` t);