提问者:小点点

选择可能在不同列中具有重复值的行


我有一个业务表,每个业务最多可以有3个电话号码。我想查找任何重复的电话号码,但由于电话号码在不同的列中,我认为无法使经典的分组依据查询工作。

示例数据:

在本例中,我希望将记录1、2和3标识为相同。简单地将电话号码555-551-5555标识为一个重复的号码就可以了,因为我可以做一个子查询,或者呼叫程序可以使用该电话号码并发送一个新的查询,获得3个电话列中任何一个列中的所有记录555-551-5555。

如果重要的话,这是在MariaDB上。

编辑,(添加我当前的flaying尝试,因为有人似乎真的想要它):

我现在有的是:

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

这方面的问题:

  1. 它似乎返回了表中的每一行。
  2. 在单个列中找不到重复项。

共1个答案

匿名用户

例如:

SELECT DISTINCT x.* 
  FROM my_table x 
  JOIN my_table y 
    ON y.id <> x.id 
   AND 
     ( y.phone_main     IN(x.phone_main,x.phone_mobile,x.phone_tollfree) 
    OR y.phone_mobile   IN(x.phone_main,x.phone_mobile,x.phone_tollfree) 
    OR y.phone_tollfree IN(x.phone_main,x.phone_mobile,x.phone_tollfree) 
     );