2012-03-08 16 views
1

user_object:SQL:別のクエリのフィールドとしてクエリの値を使用する方法?

id | group | object_id 
-----+--------+------------ 
    1 | admin | 30 
    2 | user | 40 
    3 | user | 50 

object_permissions:

id | name | user | admin 
------+------+--------+-------- 
    30 | foo | false | true 
    40 | bar | false | false 
    50 | baz | true | true 

私は上記の例は、役立ちます願っています。私は次のようなものが欲しい。サブクエリと場合によっては評価がある可能性がある場合でも私は考えます。

SELECT u.id 
    , o.name 
    , o.<u.group>  as permissions 
FROM user_object  u 
JOIN object_permissions o 
     ON (u.object_id = o.id); 
---------------------------- 
    id | name | permissions 
-----+-------+-------------- 
    1 | foo | true 
    2 | bar | false 
    3 | baz | true 
+0

'user'と' group'は、[予約語](のhttp:// WWW。 postgresql.org/docs/current/interactive/sql-keywords-appendix.html)をPostgreSQLと同様にすべてのSQL標準で使用します。 *識別子として使用しないでください。そうしないと、予期しないエラーが発生する可能性があります。 –

+0

@ErwinBrandstetterこれは真実かもしれませんが、これは単なる例であり、実際のデータではありません。それでも、それは注意することが重要です。 – vol7ron

答えて

1

と仮定すると、管理者/ユーザーがuser_objectのグループ欄に表示される唯一の値であり、これを試してみてください。

SELECT u.id 
    , o.name 
    , CASE WHEN u.group = 'admin' 
      THEN o.admin 
      ELSE o.user 
     END AS permissions 
FROM user_object  u 
JOIN object_permissions o 
     ON (u.object_id = o.id); 
+0

彼らはそうではありませんが、私はCASE文を使うことについても考えなかったのです。これは+ 1 – vol7ron

関連する問題