2017-01-17 5 views
0

テーブルJOIN:3つのテーブルSQL:CASEは、我々が持っている

  • ユーザー{ID、ROLE_ID}
  • スタッフ{USER_ID}
  • クライアント{USER_ID}

関係1対1 - ユーザー - スタッフとユーザー - クライアント

サンプルデータ

users_tableclient_table

質問:必要に応じてこれらの3つのテーブルからデータを選択する方法users.role_id = 4の場合はクライアントに参加し、そうでない場合はスタッフに参加します。このようなことができますか?

私はしてみてください:

SELECT "users" JOIN CASE WHEN users.role_id IN (4) THEN 'clients' ELSE 'staff' ON "users"."role_id" IN (4) THEN 'clients' ELSE 'staff'.user_id = users.id 

しかし、持っているエラー

ERROR: syntax error at or near "JOIN" LINE 2: JOIN CASE WHEN users.role_id IN (4) THEN 'clients' ELSE 'sta...

+1

サンプルデータ、所望の結果を提供してください。 –

+0

@GordonLinoffあなたのためのサンプルデータ写真付き編集ポスト – Satuyan

答えて

0

あなたは2つのクエリを使用して、結果を組み合わせることUNION ALLを使用することができます。

SELECT 
    <columns> 
FROM users AS u 
INNER JOIN clients AS c 
    ON c.user_id = u.id 
WHERE u.role_id = 4 

UNION ALL 

SELECT 
    <columns> 
FROM users AS u 
INNER JOIN staff AS s 
    ON s.user_id = u.id 
WHERE u.role_id <> 4 
1

はこれが何をしたいですか?

SELECT u.*, 
     (CASE WHEN users.role_id IN (4) THEN 'clients' ELSE 'staff' END) as role 
FROM users u 
WHERE u."role_id" IN (4); 

上記は機能します。しかし、あなたのテーブルが他の列を持っている場合、あなたが望むかもしれない:

select u.*, 
     (case when c.user_id is not null then 'client' else 'staff' end) 
from users u left join 
    clients c 
    on u.role_id = 4 and c.user_id = u.id left join 
    staff s 
    on u.role_id <> 4 and s.user_id = u.id; 
関連する問題