2010-05-18 98 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

相关问题