三行加入mysql两次成功第三次没有
问题描述:
我有三张桌子人物,物品和地点。人们只能有1件物品。地点与2个表中的任何一个没有关系。我想让我记录加入所有3.我迄今做了2个人+项目,但是第3个我一直收到MySQL错误。没有加入位置。任何帮助?感谢三行加入mysql两次成功第三次没有
SELECT * FROM ITEMS i
RIGHT JOIN PEOPLE p
ON (p.ITEM_ID =i.ID) where
p.ID=3
RIGHT JOIN
SELECT * FROM LOCATIONS lo where lo.ID=7
答
如果在没有公共join
键,那么你可能需要做一个cross join
。这产生了笛卡尔乘积,也就是从People
/items
选择用于每一行的每个位置:
SELECT *
FROM ITEMS i RIGHT JOIN
PEOPLE p
ON (p.ITEM_ID =i.ID) cross join
location l
WHERE p.ID=3
顺便提一下,MySQL有一个非常灵活的(和非标准)join
语法。您实际上可以将on
子句从join
中删除,并且其行为与cross join
的行为相同。当然,这是一个坏习惯。如果您想要交叉连接,请明确使用cross join
。
+0
是的!很棒!我喜欢堆栈溢出!谢谢! – 2013-05-09 04:27:16
答
尝试是这样的:
SELECT peo.id, it.id, loc.id
FROM People as peo
INNER JOIN Items as it on it.id = peo.id
INNER JOIN Locations as loc on loc.id = peo.id
WHERE peo.ID=3
编辑: 你的问题是编辑,而我打字,所以我的例子不匹配像以前那样。根据需要使用ITEM_ID和ID。
虽然不推荐,您还可以使用
SELECT *
FROM People as peo
INNER JOIN Items as it on it.id = peo.id
INNER JOIN Locations as loc on loc.id = peo.id
WHERE peo.ID=3
答
我假设你想要的7 ID
出现在每一行的位置......
SELECT *
,(SELECT loc.name FROM Location loc WHERE loc.ID = 7) AS Location
FROM ITEMS i
RIGHT JOIN PEOPLE p
ON (p.ITEM_ID =i.ID)
WHERE p.ID=3
OR
SELECT *
FROM ITEMS i
RIGHT JOIN PEOPLE p
ON (p.ITEM_ID =i.ID)
CROSS JOIN (SELECT * FROM LOCATIONS lo where lo.ID=7) l
WHERE p.ID=3
OR
[several other ways to go about it]
如果位置是与其他表格无关,你为什么试图将它加入他们? – 2013-05-08 21:32:51
你能提供样本输入数据和结果吗? – 2013-05-08 21:39:34
人员或项目需要对Locations.ID的引用。否则,这种情况意味着什么:) – rivarolle 2013-05-08 21:40:06