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



表 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 作为键字段,但两个表中所有重复的行都是相同的。

试试这个,如果模式相同,以下应该可以工作

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

尝试使用运算符SQL 除外。更多信息需要在这里找到

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;

注意:查询中指定的列必须等效于 w.r.to.、table1 和 table2

请使用以下查询来获得您想要的结果。

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

您可以使用以下逻辑-

注意:删除是一项有风险的操作。请先尝试使用测试数据。

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

这就是我想要的:

WITH
unwanted_rows AS (
SELECT
a.*
FROM
`table` a
JOIN (
SELECT
interval_uid,
COUNT(*)
FROM
`table`
GROUP BY
interval_uid
HAVING
COUNT(*) > 1) b
ON
a.interval_uid = b.interval_uid
WHERE
duration IS NULL
)
SELECT
*
FROM
`table` EXCEPT DISTINCT
SELECT
*
FROM
unwanted_rows

相关内容

最新更新