MySQL跨多个列搜索重复项

MySQL跨多个列搜索重复项,mysql,duplicates,Mysql,Duplicates,道歉:我想说的是,副本必须在同一列中 我有以下代码: SELECT m.* FROM ( SELECT text FROM mytable GROUP BY text HAVING COUNT(*) > 1 ) q JOIN mytable m ON m.text = q.text 这使我能够搜索列text上的重复项,效果很好。但是,我有一张桌子,上面有: q1a, q2a, q3a, q4a, q5a 我想让查询检查所有列中是否有重复项-如

道歉:我想说的是,副本必须在同一列中

我有以下代码:

SELECT m.* FROM ( 
    SELECT text 
    FROM mytable 
    GROUP BY text 
    HAVING COUNT(*) > 1 ) q 
JOIN mytable m 
ON m.text = q.text
这使我能够搜索列
text
上的重复项,效果很好。但是,我有一张桌子,上面有:

q1a, q2a, q3a, q4a, q5a
我想让查询检查所有列中是否有重复项-如果可能的话,有人能给我一个提示吗

谢谢


H.

如果我没有理解您的问题,您可以使用如下查询:

SELECT m.*
FROM (
    SELECT txt FROM (
      SELECT q1a as txt FROM mytable
      UNION ALL
      SELECT q2a as txt FROM mytable
      UNION ALL
      SELECT q3a as txt FROM mytable
      UNION ALL
      SELECT q4a as txt FROM mytable
      UNION ALL
      SELECT q5a as txt FROM mytable) u
    GROUP BY
      txt
    HAVING COUNT(*)>1) q
  INNER JOIN mytable m
  ON q.txt IN (m.q1a, m.q2a, m.q3a, m.q4a, m.q5a)

请参阅fiddle。

这可能是您需要的,它将为您提供复制的文本,以及在哪些行和列上找到匹配项

SELECT GROUP_CONCAT(id) ids,q1a text,1 col 
FROM myTable GROUP BY text HAVING COUNT(*)>1
UNION
SELECT GROUP_CONCAT(id),q2a text,2 
FROM myTable GROUP BY text HAVING COUNT(*)>1
UNION
SELECT GROUP_CONCAT(id),q3a text,3  
FROM myTable GROUP BY text HAVING COUNT(*)>1
UNION
SELECT GROUP_CONCAT(id),q4a text,4  
FROM myTable GROUP BY text HAVING COUNT(*)>1
UNION
SELECT GROUP_CONCAT(id),q5a text,5 
FROM myTable GROUP BY text HAVING COUNT(*)>1

.

任何列上的匹配的期望结果是什么?两行都包含匹配项,但没有匹配项的指示?表上有一个ID,如果可能的话,我希望能将其带回来?它当前使用
选择m.*
来完成此操作。感谢您的回复-但是,这是不正确的。重复项必须在同一列中。@Homer\u J您的预期输出是什么?@Homer\u J如果它们应该在同一列中,您可以将其添加到您的问题中。@JoachimIsaksson-您的答复去了哪里-就是这样!:-)@荷马重新添加了答案,改为计算每列的重复项,而不是跨列。您可以检查历史记录以获得旧答案,但它与此问题相同,它在所有列中都发现了重复项。同样,看起来正确,但是
id
返回为
[BLOB-7B]
!?
id
字段是
result\u id
这有区别吗?@Homer\u J Hm,你的id是什么类型的?:)@荷马:我不熟悉那种类型,也不能将小提琴中
id
的类型从
int
改为
result\u id
,这样我就可以测试了。有没有关于这种类型的文档可以参考?通过使用不同的列解决了它-代码工作得很好-谢谢。