Sql 比较主条目并从子表中选择
我有一张主桌Sql 比较主条目并从子表中选择,sql,postgresql,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
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解决此问题的提示吗?假设
类别列为布尔型
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;
括号在这里是可选的。运算符优先级对我们有效
如果引用完整性是由外键约束和transaction.type
上的NOT NULL
约束强制执行的,则可以使用[INNER]JOIN
而不是LEFT[OUTER]JOIN
。这个问题需要一个表定义,我们可以在其中查看数据类型和约束<代码>\d tbl
在psql中。由于master.category\u x可以增长到30,即category\u 1、category\u 2,因此任何CASE语句的替代方案都可以。。。类别_30.@Sandeep:您看到我对数据类型和约束的请求了吗?