SQL 显示一条记录是不是存在于多个表中

Posted

技术标签:

【中文标题】SQL 显示一条记录是不是存在于多个表中【英文标题】:SQL Show if a record exists in multiple tablesSQL 显示一条记录是否存在于多个表中 【发布时间】:2021-09-21 08:14:55 【问题描述】:

虽然看起来和这里的其他问题很相似,但这个案例有点不同,我在这里找不到答案。

我有一个固定的表格列表(例如table_1, table_2, table_3, etc...),其中可能包含大约 50 个表格。 这些表可能有不同的方案,但它们都具有整数类型的列id

有一个整数的输入列表,任务是获取一个输出表,表名作为列,输入整数作为行,单元格中带有布尔值:TRUE如果对应的id存在对应的记录表和FALSE 否则。

如果可能,我想在单个查询中检索结果。

或者,如果记录存在于所有表中,则有一个列 exists_in_all 将具有 TRUE ,否则具有 FALSE ,这将是完美的。

例如:

输入:

111, 222, 333, 444, 123, 456

表格:

table_1:
id some_column
111 'lorem ipsum'
222 'and'
333 'some'
444 'random'
123 'strings'
table_2:
id some_column
111 'lorem ipsum'
222 'and'
444 'random'
123 'strings'
table_3:
id some_column
111 'lorem ipsum'
222 'and'
333 'some'
444 'random'

想要的结果:

id exists_in_all table_1 table_2 table_3
111 TRUE TRUE TRUE TRUE
222 TRUE TRUE TRUE TRUE
333 FALSE TRUE FALSE TRUE
444 TRUE TRUE TRUE TRUE
123 FALSE TRUE TRUE FALSE
456 FALSE FALSE FALSE FALSE

我对@9​​87654338@、JOINs、UNIONs 进行了几次尝试,但都无法得到我想要的结果。也许,我没有正确使用它们。

单个记录的查询也可以工作。

例如:

输入

123

结果
id 123
exists_in_all FALSE
table_1 TRUE
table_2 TRUE
table_3 FALSE

提前致谢!

【问题讨论】:

这需要动态 SQL 解决方案。最佳解决方案取决于您的特定数据库平台。 这听起来很奇怪。知道在我的 customers 表中有一个 ID 123,但在我的 stores 表中没有,我会获得什么信息。这是关于数据库复制吗?否则,这可能只是一个同样奇怪的数据库的指标。不管怎样:你的 DBMS 是什么? 您好,请添加您尝试过的minimal reproducible example 【参考方案1】:

您可以使用条件聚合和union all 构造查询。 “all”列有点棘手,但如果你有一个固定的列表,你可以硬编码你需要的计数:

select id,
       (case when count(*) = 50 then 'True' else 'False' end) as exists_in_all
       max(case when which = 'table1' then 'True' else 'False' end) as in_table1,
       max(case when which = 'table2' then 'True' else 'False' end) as in_table2,
       . . . 
from ((select id, 'table1' as which from table1) union all
      (select id, 'table2' from table2) union all
      . . .
     ) t
where id in ( . . . )
group by id;

您可以使用子查询的视图来简化这一点。

【讨论】:

以上是关于SQL 显示一条记录是不是存在于多个表中的主要内容,如果未能解决你的问题,请参考以下文章

如何让此查询打印仅存在于一个表中的记录?

如何用sql语句查询:在一个表中存在而另一个表中不存在的第一条记录?

Sql语句 表中相同的记录(某个字段)只显示一条,按照时间排序显示最大或最小

索引视图中完全外连接的替代方案

使用一条sql查询多个表中的记录数

如何获取SQL表中的下一条记录