2010-05-18 72 views
0

我:查找具有相同的一組列B值的MySQL的條目,它們共同的列中的值

+----+------+------+ 
| id | A | B | 
+----+------+------+ 
| 1 | 1 | 1 | < 
| 2 | 1 | 2 | < 
| 3 | 2 | 2 | 
| 4 | 2 | 3 | 
| 5 | 3 | 1 | < 
| 6 | 3 | 2 | < 
| 7 | 4 | 4 | 
| 8 | 4 | 5 | 
+----+------+------+ 

我需要選擇爲他們的共同的值相同的一組B值的條目。因此,在這種情況下,我需要ids 1,2和5,6,因爲在這些情況下,B值的序列是1,2。

這可能嗎?

謝謝!

+0

等待,您的意思是您需要選擇具有*相同* A值的條目,其中B值是*順序* - 對嗎? – JYelton 2010-05-18 19:43:53

回答

0

這是你想要的嗎?

SELECT t1.ID 
FROM TableName AS t1 
    INNER JOIN TableName AS t2 ON t1.B=t2.B AND NOT t1.A=t2.A 
0

這就是我想出了:

SELECT IDs FROM 
(SELECT GROUP_CONCAT(id) AS IDs, a FROM foo GROUP BY a) Y 
WHERE a IN 
(SELECT Ta.a FROM (SELECT a, GROUP_CONCAT(b) AS c FROM foo GROUP BY a) Ta 
JOIN (SELECT a, GROUP_CONCAT(b) AS c FROM foo GROUP BY a) Tb USING (c) WHERE T 
a.a <> Tb.a) 

與結果:

+------+ 
| IDs | 
+------+ 
| 1,2 | 
| 5,6 | 
+------+ 
2 rows in set (0.00 sec) 

的想法是,等值連接上SELECT a, GROUP_CONCAT(b) AS c FROM foo GROUP BY a爲我們提供了有a值b的值相同。 (隨着更多數據被添加到表中,這可能需要被細化爲相關的子查詢)。

然後,我們選擇具有相同值b

相關問題