Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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_Select - Fatal编程技术网

SQL-获取与表中未找到的字符串和字符串列表匹配的行的列值?

SQL-获取与表中未找到的字符串和字符串列表匹配的行的列值?,sql,postgresql,select,Sql,Postgresql,Select,我有一个表,其中有一个“serialnumber”(VARCHAR(50))列和一个“active”(BOOLEAN)列。。。因此,数据样本可能如下所示: serial | active -------------+------- ABCD232010E5 | True ABCD1820102C | False ABCD1820102C | True ZYXW06210F20 | True ABCD402004EZ | False 现在,从外部来源,我得到了一个序列号列表,如下所示

我有一个表,其中有一个“serialnumber”(VARCHAR(50))列和一个“active”(BOOLEAN)列。。。因此,数据样本可能如下所示:

serial       | active
-------------+-------
ABCD232010E5 | True
ABCD1820102C | False
ABCD1820102C | True
ZYXW06210F20 | True
ABCD402004EZ | False
现在,从外部来源,我得到了一个序列号列表,如下所示:

ABCD232010E5
ZYXW49201X20
ABCD1820102C
ABCD402004EZ
ZYXW012100R3
ABCD44200B1W
我是否可以运行单个(理想情况下)查询或一系列查询来获取以下详细信息:

  • 序列号是否有
    active=True
    条目
  • 如果没有,是否有
    active=False
    条目
  • 如果它在表中根本不存在,则显式地将其列出来
我对输出不太挑剔,只要:

  • 将列出我输入的所有序列,无论它们是否存在
  • 我输入的每个序列只列出一次,不管它在表中出现多少次
  • 如果表中存在,是否至少有一个条目具有
    active=True
类似于下面的内容就可以了(添加注释以解释我为什么期望给定的输出):


如果输出只有两列,并且active=表示表中不存在的序列号,我也可以。正如我所说,我并不挑剔,我只需要能够区分这三种状态(exists and has active=True,exists and not has active=True,not exists)。

一种方法是子查询:

select i.*,
       (exists (select 1 from serials s where s.serial = i.serial and active
       )) as has_active_true,
       (exists (select 1 from serials s where s.serial = i.serial and not_active
       )) as has_active_false,
       (not exists (select 1 from serials s where s.serial = i.serial
       )) as no_match
from input i;
通过将末尾的
输入i
替换为以下内容,可以直接针对值列表运行此操作:

(VALUES
        ('serial1'),('serial2'),('serial3'),
        ('serial4'),('serial5'),('serial6')
) AS i (serial)

谢谢,这正是我想要的!子查询缺少第二个结束参数,因此我为此提交了一个编辑。它不允许我编辑,因为更改只有3个字符,所以我添加了如何查询值列表,因为这是我的特殊用例,我认为它可能也会帮助其他人。
(VALUES
        ('serial1'),('serial2'),('serial3'),
        ('serial4'),('serial5'),('serial6')
) AS i (serial)