我有一个名为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
的共同值。
答案 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小提琴: -
答案 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