1

私は2つのテーブルを持っています。

労働者と経験

テーブル worker には行 worker_parent があります (1 つの worker が他のものを担当できるため)。

いいえ、そのようにテーブルを接続する必要があります:

SELECT w1.* FROM workers w1 LEFT JOIN workers w2 ON (w2.id = w1.worker_parent)

そして、それは大丈夫です。しかし、私は w2 の経験によって注文する必要があり、テーブルの経験を追加しようとしましたが、w2 ではなく w1 に接続されています。

私の質問は、w2 にテーブルの経験 (行 worker_id を持つ) を追加し、経験によって並べ替える方法と、w1 からデータを選択する方法です。

これが私の試みです。

SELECT w1.* FROM workers w1 LEFT JOIN workers w2 ON (w2.id = w1.worker_parent) LEFT JOIN experience e ON (w2.id = e.worker_id) ORDER BY e.experience DESC

手伝ってくれてありがとう

4

1 に答える 1

1

経験のある親を持つ子ワーカーのみが必要な場合は、where を追加する (または結合タイプを変更する) 必要があります (読みやすくするために、w1 と w2 の名前を w_child と w_parent に変更しました)。

SELECT w_child.*, e_parent.experience
FROM workers AS w_child 
LEFT JOIN workers AS w_parent ON (w_parent.id = w_child.worker_parent) 
LEFT JOIN experience AS e_parent ON (w_parent.id = e_parent.worker_id) 
WHERE e_parent.worker_id IS NOT NULL
ORDER BY e_parent.experience DESC
于 2012-07-07T08:41:18.013 に答える