【发布时间】:2018-09-06 12:41:00
【问题描述】:
假设我有一个包含 3 列 A、B、C 的表。我想要一个结果集,它表示那些条目对于 A 或 B 具有多个/重复条目但对于 C 具有唯一条目。
我知道 GROUP BY 子句在这种情况下会派上用场,但它似乎比这更复杂。
例如: 比如说,一个包含以下列的客户信息的表: 1)身份证 2)电话 3)电子邮件 4)账户
获取那些多次出现相同电话或电子邮件但属于不同帐户的 ID。例如,对于原始表中的以下条目:
1) ID:12 |电话:111-111-1111 |电子邮件:johnc@email.com |帐号:2
2) ID:14 |电话:111-111-1111 |电子邮件:jcena@gmail.com |帐号:5
3) ID:15 |电话:123-234-7890 |电子邮件:jdoe@email.com |帐号:12
4) ID:21 |电话:900-893-4563 |电子邮件:jdoe@email.com |帐号:23
5) 编号:17 |电话:222-333-1111 |电子邮件:abet@email.com |帐号:3
6) 编号:19 |电话:222-333-1111 |电子邮件:abet@email.com |帐号:3
结果行如下:
1)ID:12、14 |帐号:2、5
2)ID:15、21 |帐号:12、23
不包括条目 #5 和 #6,因为帐户值没有不同,尽管电话和电子邮件相同。
提前致谢!
【问题讨论】:
-
在您的第一个示例中,您说 ID 为 12 和 14 的记录应在结果集中显示为一行。您如何决定显示两者中的哪一个?更高/更低的ID?更高/更低的帐号?
-
@nb1987 - 抱歉,我早该考虑在问题中添加该细节。在这种情况下,适合在同一列中使用逗号分隔 ID 的单行。
-
感谢您提供更多详细信息。还有一个问题/澄清 - 是帐户不同但电话或电子邮件相同的包含标准,还是帐户不同但电话和电子邮件相同的包含标准?例如,我注意到您的示例中电话号码相同,但电子邮件不同。
-
电话或电子邮件应该相同或两者都相同,因此在这种情况下 OR 是合适的。
标签: mysql sql duplicates