gpt4 book ai didi

mysql - 比较大型 MySQL 表

转载 作者:行者123 更新时间:2023-11-29 05:08:14 26 4
gpt4 key购买 nike

我需要比较两个(或更多)具有大约 60.000 行和大约 60 列的表。

在这些表中有两个值,我想对其运行查询。查询的目的是根据行中的两个值统计 TABLE_A 中存在但 TABLE_B 中不存在的行。

我运行了以下查询:

SELECT id
FROM table_a ta
WHERE NOT EXISTS (
SELECT id
FROM table_b tb
WHERE ta.value1=tb.value1 AND ta.value2=tb.value2
)

如前所述,我已经尝试了上面的代码及其一些变体。但是要运行此查询需要很长时间才能完成。我希望找到一个在 10 秒内运行的解决方案。

我尝试的下一个查询,我认为它是有效的:

SELECT value1, value2
FROM (
SELECT ta.value1, ta.value2
FROM table_a ta
UNION ALL
SELECT tb.value1, tb.value2
FROM table_b tb
) result
GROUP BY value1, value2
HAVING COUNT(*) = 1
ORDER BY value1

代码显示了两个表之间的所有差异。因此,如果 valueX 存在于 TABLE_A 但不存在于 TABLE_B 中,则显示它,反之亦然。

简而言之,我想根据行中的两个值获取 TABLE_A 中不存在于 TABLE_B 中的所有行。

希望有人能帮忙,谢谢!

最佳答案

为什么不使用联接?

/* Create a table called NAMES */
CREATE TABLE NAMES(Id integer PRIMARY KEY, Name text, LastName text);
CREATE TABLE OTHERNAMES(Id integer PRIMARY KEY, Name text, LastName text);

/* Create few records in this table */
INSERT INTO NAMES VALUES(1,'Tom','Riddle');
INSERT INTO NAMES VALUES(2,'Lucy','I love');
INSERT INTO NAMES VALUES(3,'Frank','Frankly');
INSERT INTO NAMES VALUES(4,'Jane','Austen');
INSERT INTO NAMES VALUES(5,'Robert','Downey');

INSERT INTO OTHERNAMES VALUES(2,'Lucy','I love');
INSERT INTO OTHERNAMES VALUES(3,'Frank','Frankly');
INSERT INTO OTHERNAMES VALUES(4,'Jane','Austen');
INSERT INTO OTHERNAMES VALUES(5,'Robert','Downey');

select * from NAMES
LEFT JOIN OTHERNAMES on
NAMES.Name = OTHERNAMES.Name
AND Names.LastName = OTHERNAMES.LastName
where OTHERNAMES.id is null

在线查看http://sqlfiddle.com/#!9/640c53/1

如果您使用 LEFT JOIN,右表中不存在的项目将被替换为空条目,可以使用 where 进行过滤。

我不知道您的 60.000 数据库的效率如何,但这通常对我有用。

关于mysql - 比较大型 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44434333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com