标准SQL-删除表2中存在的表1中的所有行

时间:2019-12-03 10:28:04

标签: sql google-bigquery

表1有101,915行,表2有49,466行,所有这些都存在于表1中。表1在查询后应该有101,915-49,466 = 52,449。

我尝试查询左联接,但它仅返回8,269行。

SELECT
  A.*
FROM
  `table1` A
LEFT JOIN
  `table2` B
ON
  A.interval_uid = B.interval_uid
WHERE
  B.interval_uid IS NULL

我使用interval_uid作为键字段,但是两个表中所有重复的行都是相同的。

5 个答案:

答案 0 :(得分:1)

尝试一下,如果架构相同,则应遵循

INSERT INTO `table3` SELECT
   *
FROM
  `table1` A 
 WHERE 
        A.interval_uid NOT IN (SELECT B.interval_uid FROM `table2` B)

答案 1 :(得分:1)

尝试对SQL使用运算符 EXCEPT 。需要更多信息,请找到here

SELECT col1, col2, col3,..
FROM table1
EXCEPT
SELECT col1, col2, col3,..
FROM table2;

插入查询,如下所示:

Insert into table3
SELECT col1, col2, col3,..
FROM table1
EXCEPT
SELECT col1, col2, col3,..
FROM table2;

注意:查询中指定的列必须与表1和表2等价。

答案 2 :(得分:1)

请在下面的查询中使用您想要的结果。

WITH CTE
AS (
    SELECT *
    FROM Table_1

    EXCEPT

    SELECT *
    FROM Table_2
    )
INSERT INTO Table_3
SELECT *
FROM CTE

如果您不想在表3中插入,请尝试执行此操作。

SELECT * FROM Table_1
EXCEPT
SELECT * FROM Table_2

答案 3 :(得分:0)

您可以使用以下逻辑-

注意:删除操作存在风险。请先尝试使用测试数据。

DELETE table1
FROM table1
INNER JOIN table2 ON Table1.interval_uid = Table2.interval_uid 

答案 4 :(得分:-1)

这就是我想要的:

querySelector