2013-06-22 83 views
0

APOLOGIES:我的意思是说,重复必须在同一列内。MySQL搜索跨多列的重复

我有以下代码:

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.

+0

对于任何列的匹配,期望的结果是什么?两行都包含没有匹配指示的匹配? –

+0

桌子上有一个ID,如果可能的话,我希望能带回来?它目前使用'SELECT m。*'完成此操作。 –

回答

1

这可能是你需要的,它会给你重复的文本,以及找到匹配的行和列;

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 

An SQLfiddle to test with

+0

然而,看起来正确但是'id'回来了'[BLOB-7B]'!? 'id'字段是'result_id'这是否有所作为? –

+0

@Homer_J嗯,你的id是什么类型? :) –

+0

Apols - 'result_id' !!!! –

0

如果我正确你已了解的问题,你可以使用这样的查询:

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) 

请参阅小提琴here

+0

感谢您的回复 - 但是,这是不正确的。重复项必须位于同一列中。 –

+0

@Homer_J您的预期产量是多少? – fthiella

+0

@Homer_J如果他们应该在同一列,你可能想要添加到你的问题。 –