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 |
我对@987654338@、JOIN
s、UNION
s 进行了几次尝试,但都无法得到我想要的结果。也许,我没有正确使用它们。
单个记录的查询也可以工作。
例如:
输入
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语句查询:在一个表中存在而另一个表中不存在的第一条记录?