Mysql有一个表引用本身

时间:2012-07-31 15:45:39

标签: mysql sql

我想要做的是我需要搜索非玩家角色的游戏应用程序,并且他们有一个名为target_id的字段,用于存储他们追逐的内容的ID。

given:
table mobs with fields and some example data
id   x   y   target_id
1    1   1   2
2    3   3   1

我想通过查询返回以下数据

id   x   y   target_id target_x target_y
1    1   1   2         3        3
2    3   3   1         1        1

这是我尝试的但它有语法错误

SELECT id,x,y,target_id, target.x, target.y FROM mobs LEFT JOIN mobs AS target ON      target_id=id FROM mobs WHERE 1

2 个答案:

答案 0 :(得分:2)

据我所知,正确的语法是:

SELECT mobs.id, mobs.x, mobs.y, mobs.target_id, target.x, target.y 
FROM mobs 
LEFT JOIN mobs AS target 
ON      mobs.target_id = target.id

你已经通过说'JOIN'指定了'FROM',当你不需要过滤任何行时你不需要WHERE

编辑:抱歉我没有把别名放进去 - 你需要确保最后一部分(以及选择中的字段)有你想要定位的表 - 记住,如果你说target_id并不意味着什么在查询中有两个具有相同列名的表。否则你会得到歧义错误。我已将别名添加到查询

答案 1 :(得分:2)

我不知道为什么你有WHERE 1或第二FROM,但我相信这就是你想要的:

SELECT M.id, M.x, M.y, M.target_id, T.x, T.y 
FROM mobs AS M
LEFT JOIN mobs AS T 
ON M.target_id = T.id 

将来,您应该发布您的表格定义和预期结果,以便您的问题更清晰。