2012-03-08 299 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

相关问题