【发布时间】:2021-07-14 18:52:17
【问题描述】:
我有一张商家表,每个商家最多可以有 3 个电话号码。我想查找任何重复的电话号码,但由于电话号码位于不同的列中,我认为我无法使经典的 GROUP BY 查询工作。
样本数据:
| ID | Business_Name | phone_main | phone_mobile | phone_tollfree |
|---|---|---|---|---|
| 1 | John's Donuts | 555-551-5555 | 555-551-5556 | null |
| 2 | John's Bakery | 555-551-5557 | 555-551-5555 | null |
| 3 | SuperBake! | 555-300-1005 | null | 555-551-5555 |
| 4 | Grocery Fred | 555-223-5511 | 555-334-5555 | null |
在这种情况下,我想将记录 1、2 和 3 标识为相同的。只需将电话号码 555-551-5555 识别为具有重复项的号码就可以了,因为我可以进行子查询,或者调用程序可以使用电话号码并发送一个新查询,以获取所有包含 555-551-5555 的记录3 个电话列。
如果重要的话,这在 MariaDB 上。
编辑,(添加我当前的尝试,因为似乎有人真的想要它):
这是我现在拥有的:
SELECT ID, phone_main, phone_mobile, phone_tollfree
(
SELECT COUNT(*) FROM businesses b
WHERE (
phone IS NOT NULL AND (b.phone_mobile=phone OR b.tollfree=phone )
)
OR (
phone_mobile IS NOT NULL AND (b.phone=phone_mobile OR b.phone_tollfree=phone_mobile)
)
OR (
phone_tollfree IS NOT NULL AND (b.phone=phone_tollfree OR b.phone_mobile=phone_tollfree)
)
) cnt
from business HAVING cnt > 1
这个问题:
- 它似乎正在返回我表中的每一行。
- 它不会在单个列中找到重复项。
【问题讨论】:
-
继续。尝试一下。
-
像什么?我可以轻松地
group by任何单列。或者我可以做一堆加入phone_main和phone_mobile等的连接,或者我可以尝试某种子查询,但我在这里寻找策略,不一定是确切的代码。 -
任你挑选。
-
也许我应该在帖子中更清楚一些,但我整个上午都在努力想办法做到这一点。我已经运行了
group by查询,但它们没有帮助,因为有不止一列。我想不出一种方法来加入有用的东西,而且我当前的子查询没有返回有意义的数据。我发帖是因为我没有想法。我在寻求帮助,被告知“继续。试试看”。没有帮助。
标签: mysql sql duplicates mariadb grouping