表 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