0

我有三张表 People、Items 和 Locations。人们只能拥有 1 个项目。位置与 2 个表中的任何一个都没有关系。我想让我记录加入所有 3。到目前为止,我做了 2 个人 + 项目,但第 3 次我不断收到 MySQL 错误。位置没有 JOIN ON。有什么帮助吗?

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
4

3 回答 3

0

尝试这样的事情:

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 
于 2013-05-08T21:40:26.980 回答
0

如果没有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子句从 ajoin中删除,它的行为与 a 相同cross join。当然,这是一个坏习惯。如果您想要交叉连接,请cross join显式使用。

于 2013-05-08T21:43:35.520 回答
0

我假设您希望ID7 的位置出现在每一行...

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 

或者

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 

或者

[several other ways to go about it]
于 2013-05-08T21:47:45.983 回答