2016-02-29 132 views
0

我得到了以下表结构。选择具有相同列值的行(Mysql)

id || column a || column b 
--------------------------------- 
1   1    2  
2   5    1 
3   1    2 
4   2    3 
5   6    52 
6   1    1 
7   3    5 
8   6    52 
9   52    6 
10   13    88 

如何选择两列中具有相同值的行?所以在我的情况下,我应该得到行其中id等于1,3,5,8

+0

我认为你需要更具体的你是如何决定哪些行将显示在此查询的resuilt! – RiggsFolly

回答

1

能不能请你:

Select t1.id, t1.ColumnA, t1.ColumnB 
From Table t1 
inner join Table t2 on (t1.id <> i2.id AND t1.columnA = t2.columnA AND t1.columnB = t2.columnB) 
+0

你在...附近...目前我得到了重复的行...例如:id,columnA,columnB,id,columnA,columnB ....并且结果也是重复的,但是正确的一个 –

+0

尝试选择t1.id,t1。 columnA,t1.columnB代替使用*。如果您有重复记录,请尝试在select中使用DISTINCT。 (答案更新D) –

+0

不错!做得好,谢谢! –

1

您可以使用分组:

SELECT COLUMN_A, COLUMN_B 
FROM mytable 
GROUP BY COLUMN_A, COLUMN_B 
HAVING COUNT(*) > 1 

这将选择所有COLUMN_A, COLUMN_B重复对。为了让整行,你可以使用:

SELECT t1.ID, t1.COLUMN_A, t1.COLUMN_B 
FROM mytable AS t1 
INNER JOIN (
    SELECT COLUMN_A, COLUMN_B 
    FROM mytable 
    GROUP BY COLUMN_A, COLUMN_B 
    HAVING COUNT(*) > 1 
) AS t2 ON t1.COLUMN_A = t2.COLUMN_A AND t1.COLUMN_B = t2.COLUMN_B 

或者您可以使用EXISTS

SELECT * 
FROM mytable AS t1 
WHERE EXISTS (
    SELECT 1 
    FROM mytable AS t2 
    WHERE t1.ID <> t2.ID AND 
     t1.COLUMN_A = t2.COLUMN_A AND 
     t1.COLUMN_B = t2.COLUMN_B)