2016-02-29 134 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)