我有一张主表
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解决此问题的提示?
答案 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
。