sql - SQL 显示一条记录是否存在于多个表中
问题描述
尽管它看起来与这里的其他问题相似,但这个案例有点不同,我在这里找不到答案。
我有一个恒定的表列表(例如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 | 一些列 |
---|---|
111 | 'lorem ipsum' |
222 | '和' |
333 | '一些' |
444 | '随机的' |
123 | '字符串' |
table_2
:
ID | 一些列 |
---|---|
111 | 'lorem ipsum' |
222 | '和' |
444 | '随机的' |
123 | '字符串' |
table_3
:
ID | 一些列 |
---|---|
111 | 'lorem ipsum' |
222 | '和' |
333 | '一些' |
444 | '随机的' |
期望的结果:
ID | 存在于所有 | 表格1 | 表_2 | 表3 |
---|---|---|---|---|
111 | 真的 | 真的 | 真的 | 真的 |
222 | 真的 | 真的 | 真的 | 真的 |
333 | 错误的 | 真的 | 错误的 | 真的 |
444 | 真的 | 真的 | 真的 | 真的 |
123 | 错误的 | 真的 | 真的 | 错误的 |
456 | 错误的 | 错误的 | 错误的 | 错误的 |
我用SELECT ... WHEERE EXISTS ...
, JOIN
s, UNION
s 做了几次尝试,但不能完全得到我想要的。也许,我没有正确使用它们。
对单个记录的查询也可以工作。
例如:
输入
123
结果
ID | 123 |
---|---|
存在于所有 | 错误的 |
表格1 | 真的 |
表_2 | 真的 |
表3 | 错误的 |
提前致谢!
解决方案
您可以使用条件聚合和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;
您可以使用子查询的视图来简化这一点。
推荐阅读
- javascript - 对象作为 React 子级无效:尝试显示我的帖子
- c# - Comobox 和 TextBox 在 ListView WPF C# 中无法正确显示
- go - 动态规划问题 - 扩展以找到所有可能的求和路径
- browser - 应用程序的浏览器支持和兼容性 - 有什么区别?
- python - 如何使用请求库在 python 中测试重试尝试
- azure - 公开 vnet 内的 Azure 容器实例的正确方法是什么?
- python - 尝试将抓取的数据添加到列表时仅返回一个值,Python
- azure - Azure Purview 不为从 blob 存储读取的平面文件提供架构
- amazon-web-services - 在 AWS Systems Manager 中删除 Automation Runbook 执行
- python - 如何用字符串迭代嵌套的for循环?