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'
试试这个
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
我认为这是接近,但莎莉应该返回以及。她是汤姆的孩子,是汤尼的父母。我尝试了“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
是的,当孩子是1(jonny)那么你得到了他的父母(汤姆),并希望得到莎莉意味着你想得到进入(jonny)1的兄弟/姐妹?因为莎莉和乔尼有同样的父母。所以你不想得到父母,你想得到兄弟? – 2013-04-27 10:51:57
你可以编辑你的问题,并显示你想要的结果吗? – 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'
我没有测试过这一点,但是这应该工作:
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
不要让我知道如果这样做不工作...
什么是'思想'? – 2013-04-26 23:09:39
哈哈,对不起 - 打字错误:p分心打字时> _ 2013-04-26 23:11:20