gpt4 book ai didi

mysql - 返回所有 colA 与 colB 不重复的 MySQL 行

转载 作者:太空宇宙 更新时间:2023-11-03 12:16:53 25 4
gpt4 key购买 nike

我们正在尝试查找 MySQL 数据库中的数据错误,但我想不出一种在不破坏数据库的情况下处理此问题的方法。

这是数据模型:

Table: EXAMPLE
+-----+------+-------+
| ID | PID | YEAR |
+-----+------+-------+
| | | |
| 001 | A | 2014 |
| | | |
| 002 | B | 2014 |
| | | |
| 003 | A | 2014 |
| | | |
| 004 | A | 2009 |
| | | |
| 005 | B | 2014 |
| | | |
| 006 | C | 2014 |
| | | |
| 007 | C | 2014 |
+-----+------+-------+

目标是返回 PID 和 YEAR 彼此不同步的所有行。如果有三行 PID 匹配但其中任何一行的 YEAR 错误,我们需要返回所有行。

在上面的示例数据中,将返回以下内容:

+-----+------+-------+
| ID | PID | YEAR |
+-----+------+-------+
| | | |
| 001 | A | 2014 |
| | | |
| 003 | A | 2014 |
| | | |
| 004 | A | 2009 |
+-----+------+-------+

到目前为止,我处理的查询如下所示:

SELECT EXAMPLE.ID, EXAMPLE.PID, EXAMPLE.YEAR 
FROM EXAMPLE
INNER JOIN
(SELECT PID FROM EXAMPLE where PID HAVING COUNT(PID) > 1 GROUP BY PID) tmpTbl
ON EXAMPLE.PID = tmpTbl.PID

问题是在我的真实数据集中,子查询返回数据库中 255k 行中的 26k。预期结果不是“这是你的结果”,而是更多“观看我的处理动画”。

我走在正确的轨道上吗?有没有我忽略的更有效的方法?

非常感谢!

最佳答案

您可以使用 exists 子查询代替:

select e.*
from example e
where exists (select 1
from example e2
where e2.pid = e.pid and
e2.year <> e.year
);

为了让它运行得更快,在 example(pid, year) 上创建一个索引。

如果您只想要所有年份并且可以将它们排成一行,那么这可能就足够了:

SELECT PID, group_concat(year) as years
FROM EXAMPLE
where PID
GROUP BY PID
HAVING COUNT(DISTINCT year) > 1 ;

关于mysql - 返回所有 colA 与 colB 不重复的 MySQL 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21736159/

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