比较主条目并从子表中选择

时间:2014-07-21 17:45:38

标签: sql postgresql

我有一张主表

      Type       category_1  category_2 category_3 category_4
    Type A          Y           N       Y           N
    Type B          Y           Y       Y           N

和交易表

    Trans-ID    Type    category
        1           A       1
        2           A       1
        3           B       4
        4           B       1
        5           A       2
        6           B       3
        7           A       3

我想从主表中的类别为Y的事务表中选择所有条目。 主表就像事务表的掩码一样。

输出结果为:

    Trans-ID    Type    category
        1           A       1
        2           A       1           
        4           B       1           
        6           B       3
        7           A       3

请您提供一些关于如何使用postgres解决此问题的提示?

1 个答案:

答案 0 :(得分:2)

假设category_n列的类型为boolean

SELECT t.*
FROM   transaction t
LEFT   JOIN master m USING (type) -- must return single row
WHERE  CASE t.category
         WHEN 1 THEN m.category_1
         WHEN 2 THEN m.category_2
         WHEN 3 THEN m.category_3
         WHEN 4 THEN m.category_4
         ELSE FALSE -- should not occur
       END;

括号在这里是可选的。运算符优先级适用于我们。

如果外键约束和NOT NULL上的transaction.type约束强制执行参照完整性,则您也可以使用[INNER] JOIN代替LEFT [OUTER] JOIN