2016-10-17 13 views
2

クエリに参加は、私が割り当てテーブルを持っている

TaskID  Deadline supervisor division letterID organizer 
A   10 
B   20 

これはTaskID_2テーブル(すべてのカラムであります選択する必要があります):

TaskID  Deadline place_of_arrival  staffID day_of_shipment 
A1   100 
A2   200 

私は別のテーブルに参加したいと思います。

クエリが(SELECT * FROM assignment where id ='A3')の場合、タスクIDはA1になるので、タスクID2テーブルに参加したいと思います。

クエリが(SELECT * FROM assignment where id ='A2')の場合、タスクIDはBになるので、タスクID1テーブルに参加したいと思います。

可能ですか? それはこのような何か(ない有効なSQLクエリ)です:

SELECT * FROM assignment 
IF(assignment.TaskID IN (SELECT TaskID FROM TaskID_1)) 
{ INNER JOIN TaskID_1 ON assignment.TaskID = TaskID_1.TaskID } 
else 
{ INNER JOIN TaskID_2 ON assignment.TaskID = TaskID_2.TaskID } 
WHERE assignment.ID = 'some_variable' 

NB:

  • 私が持っていないスクリプトがアクティブなレコードであるので、私はCodeIgniterのを使用していますテーブル構造を変更する特権。
+0

ちょうど興味がありますが、同じ定義の2つのTaskIDテーブルを持つ点は何ですか? – Devon

+0

まあ、私はすべての列を追加していないより多くの違いがあります。それはあまりにも長くなるだろう。 – Vahn

+1

あなたのケースでユニオンを使用 –

答えて

2

一般的に、条件付き結合は存在しません。あなたがテーブルに加わるか、そうではないのですが、あなたの心を補う必要があります。

期待されるout comeを達成するためにできることは、割り当てテーブルへの2つの外部結合、またはinnerが割り当てテーブルを2つのtaskidテーブルの1つに結合する2つのクエリの和集合です。私はあなたに外部結合バージョンを表示します。選択リストでは、最初のNULL以外の値を返すためにcoalesce()を使用するか、両方のテーブルのフィールドをリストし、呼び出し元のアプリケーションでどのフィールドのデータを使用するかを決定します。

select a.*, coalesce(t1.deadline, t2.deadline) as deadline from assignment a 
left join taskid_1 t1 on a.taskid=t1.taskid 
left join taskid_2 t2 on a.taskid=t2.taskid 
+0

woah、ありがとうございます。ちょっと微妙な調整をして、私は期待した結果を得ました。 – Vahn

関連する問題