0

私がやりたいのは、ゲームアプリケーションの場合、ノンプレイヤーキャラクターを検索する必要があり、彼らには、追跡しているもののIDを格納するtarget_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
4

2 に答える 2

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は2つのテーブルがある場合はあまり意味がありません同じ列名のクエリで。そうしないと、あいまいなエラーが発生します。クエリにエイリアスを追加しました

于 2012-07-31T15:47:56.850 に答える
2

WHERE 1なぜあなたがまたは2番目を持っているのかわかりませんが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 

将来的には、テーブルの定義と期待される結果を投稿して、質問がより明確になるようにする必要があります。

于 2012-07-31T15:49:17.507 に答える