在MYSQL弱关系表中查找共同出现的值

时间:2014-02-05 09:54:44

标签: mysql join

我有一个名为header的弱关系表,它基本上只有三个ID:id是一个自动增量主键,did指向表D的id和{{ 1}}指向表格的ID。D和H在这里无关紧要。 我想查找hid的任何值,hid与原始hid共享did的其他值。一个例子:

id | did | hid
===============
1  | 1   | 1
2  | 1   | 2
3  | 1   | 3
4  | 2   | 1
5  | 2   | 4
6  | 2   | 5
7  | 3   | 2
8  | 3   | 6

对于hid,我希望找到hid = 1,因为那些id = {2,3,5,6}did共有。

我可以通过在PHP中创建一些数组并运行hid = 1和相应hid的所有可能值来实现这一点,但这对于大型表来说是一个非常缓慢的过程。我想知道是否有一种聪明的did或类似的陈述可以用来找到JOIN的共同值。

2 个答案:

答案 0 :(得分:1)

如果我理解正确的话: -

SELECT a.hid, GROUP_CONCAT(b.id)
FROM header a
INNER JOIN header b
ON a.did = b.did
AND b.hid != 1
WHERE a.hid = 1
GROUP BY a.hid

SQL小提琴: -

http://www.sqlfiddle.com/#!2/9aa26/1

答案 1 :(得分:0)

也许这个:

SELECT d.id
FROM (
   SELECT *
   FROM header
   WHERE header.hid =1
) AS h
JOIN header AS d ON d.did = h.did
WHERE d.hid !=1