Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 比较主条目并从子表中选择_Sql_Postgresql - Fatal编程技术网

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:您看到我对数据类型和约束的请求了吗?