2012-07-31 44 views
0

我想要做的是爲一個遊戲應用程序,我需要搜索我的非玩家角色,他們有一個名爲target_id的字段,存儲他們正在追逐的任何ID。Mysql有一個表引用本身

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 
+0

刪除秒''小怪' - 和最後一個WHERE – Charleh 2012-07-31 15:47:08

+0

你錯過了'ON' – jcho360 2012-07-31 15:47:41

+0

@ jcho360 - 不,那不是,'ON'在那裏。 – Lamak 2012-07-31 15:50:28

回答

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 

在未來,你應該發佈你的表格定義和預期的結果,這樣你的問題就更清楚了。

+0

+1打我和第一次得到它的權利:) – Charleh 2012-07-31 15:54:00

+0

我沒有發佈實際的表定義,因爲我的表是用於遊戲應用程序,所以他們有大約70場。 – Shawn 2012-07-31 16:01:19

+0

@Shawn - Wee不需要你的整個表格定義,只是必要的領域來理解你的問題,並思考如何解決它。在這種情況下,例如,您可能已經發布了您的表和「id,target_id,x,y」列 – Lamak 2012-07-31 16:03:33

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

編輯:對不起,我沒有放別名 - 你需要確保最後一部分(以及select中的字段)擁有您想要定位的表 - 請記住,如果查詢中有兩個表具有相同的列名稱,則說target_id沒有多大意義。否則您將得到一個模糊性錯誤。我已經添加了別名查詢

+0

你有不明確的列,你需要爲這些列添加一個前綴。 – Lamak 2012-07-31 15:51:17

+0

是啊,已經做到了:) – Charleh 2012-07-31 15:53:22

+0

是的,這個基本想法工作的所有領域需要加前綴,所以他們不含糊......感謝您的快速反應。 – Shawn 2012-07-31 15:57:30