2012-03-08 300 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)在每個SQL標準以及PostgreSQL中。 *永遠不要*使用它們作爲標識符,否則可能會遇到意外錯誤。 – 2012-03-08 01:26:23

+0

@ErwinBrandstetter這可能是真的,但這只是一個例子,而不是實際的數據。不過,這一點很重要。 – vol7ron 2012-03-08 01:43:31

回答

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 2012-03-08 01:17:26

相關問題