MySQL INNER JOIN与WHERE条件的结果?

问题描述:

我希望能够查询MySQL数据库,以便根据他们的父母和孩子找到一个人的兄弟姐妹。我们假设在这里假设一个人的父母的孩子以及一个人的孩子的父母是该人的兄弟姐妹。MySQL INNER JOIN与WHERE条件的结果?

id name 
----------- 
1 jonny 
2 tom 
3 sally 
4 bill 
5 katie 
6 jessica 

RELS

id parent child 
-------------------- 
1 2  3 
2 5  6 
3 2  1 
4 1  6 
5 1  4 
6 6  2 

我一直在试图找出如何加入,让我这些结果的方式这两个表,但我可以没有对的。

SELECT people.id,people.name FROM people, rels 
INNER JOIN rels children ON people.id = rels.parent 
INNER JOIN rels siblings ON children.id = siblings.child 
WHERE children.child = '1' 
+0

什么是'思想'? – 2013-04-26 23:09:39

+0

哈哈,对不起 - 打字错误:p分心打字时> _ 2013-04-26 23:11:20

试试这个

SELECT people.id,people.name FROM people 
    LEFT JOIN rels children ON people.id = children.parent 
    LEFT JOIN rels siblings ON people.id = siblings.child 
    WHERE children.child = '1' 
    group by people.id 

DEMO HERE

+0

我认为这是接近,但莎莉应该返回以及。她是汤姆的孩子,是汤尼的父母。我尝试了“SELECT people.id,people.name FROM people LEFT JOIN rels children people.id = children.parent LEFT JOIN rels parents on people.id = parents.child LEFT JOIN rels siblings ON people.id = siblings .child WHERE children.child ='1'OR parents.parent ='1' group by people.id“ - 抱歉格式化,但是也返回了一个账单,他只是jonny的一个孩子。 – 2013-04-26 23:50:05

+0

是的,当孩子是1(jonny)那么你得到了他的父母(汤姆),并希望得到莎莉意味着你想得到进入(jonny)1的兄弟/姐妹?因为莎莉和乔尼有同样的父母。所以你不想得到父母,你想得到兄弟? – 2013-04-27 10:51:57

+0

你可以编辑你的问题,并显示你想要的结果吗? – 2013-04-27 10:54:03

我用工会,我认为这会为现在做的拿出一个解决方案。如果任何人都可以想出一个纯粹基于JOIN的解决方案,我很乐意看到它!

SELECT people.*,c.* FROM rels 
    INNER JOIN rels c ON rels.parent = c.parent 
    INNER JOIN people ON people.id = c.child 
    WHERE rels.child = '1' AND people.id <> '1' 

UNION 

SELECT people.*,p.* FROM rels 
    INNER JOIN rels p ON rels.child = p.child 
    INNER JOIN people ON people.id = p.parent 
    WHERE rels.parent = '1' AND people.id <> '1' 

http://sqlfiddle.com/#!2/45ba3/103/0

我没有测试过这一点,但是这应该工作:

SELECT ppl.* from people as ppl 
INNER JOIN rels AS par1 on ppl.id = par1.child 
INNER JOIN rels as par2 on par2.parent = par1.parent 
INNER JOIN people as sib on sib.id = par2.child 
WHERE ppl.id = '3' 

说明服用例如萨莉(ID = 3)

从PPL选择的人兄弟姐妹将被找到。 (id = 3)

从PAR1(父级)中选择其父级。家长= 2选择

从PAR2(家长)选择相同的父父= 2选择

从SIB(人)选择细节其中id = 3,1

不要让我知道如果这样做不工作...