0

次のテーブルでデータベースを作成しました。

booking (id, user_id, user_table, date);
user (id, fname, lname);
tmp_user (id, fname, lname);

user_id予約テーブルのは、userテーブル ID とtmp_userテーブル ID の両方を参照します。user_tableユーザーテーブルタイプを保持するために列を使用します。

ユーザーの詳細で予約の詳細を取得するためのクエリを書きたいと思います。したがってuser_table、ユーザーテーブルに参加する前に列の値を確認する必要があります。

出来ますか?どうやってやるの?

4

1 に答える 1

0

このタイプのクエリは、結合してから優先順位を使用することで実行できます。

select b.*,
       (case when u.id is not null then u.fname else tu.fname end) as fname,
       (case when u.id is not null then u.lname else tu.lname end) as lname
from booking b left outer join
     user u
     on b.user_id = u.id left outer join
     tmp_user tu
     on b.user_id = tu.id

and u.uid is null2 番目の結合に条件を追加することもできます。それがパフォーマンスに役立つか妨げになるかはわかりません。

ユーザー テーブルの値が必要な場合は、ロジックを少し変更するだけです。

select b.*,
       (case when b.user_table = 'user' then u.fname else tu.fname end) as fname,
       (case when b.user_table = 'tmp_user' then u.lname else tu.lname end) as lname
from booking b left outer join
     user u
     on b.user_id = u.id left outer join
     tmp_user tu
     on b.user_id = tu.id;
于 2013-04-23T13:40:37.053 に答える