sql - 如何从多个表中选择公共元素?
问题描述
我有表 t1 到 t37。每个都有一个主键 ID。但每张表的 ID 数量并不相同。我想跨表比较 ID,并获取在另一个表中至少有一个匹配项的 ID。我已经创建了一个查询,它为我提供了以下示例的结果。但是当我有大量表时,有没有办法做到这一点?
示例:如果A (1,2,3,4,5,6)
, B (1,7,8)
,C (6,7,8)
那么我应该得到(1,6,7,8)
。
查询示例
架构(PostgreSQL v12)
CREATE TABLE test (
id INT
);
INSERT INTO test (id) VALUES (1);
INSERT INTO test (id) VALUES (2);
INSERT INTO test (id) VALUES (3);
INSERT INTO test (id) VALUES (4);
INSERT INTO test (id) VALUES (5);
INSERT INTO test (id) VALUES (6);
CREATE TABLE test1 (
id INT
);
INSERT INTO test1 (id) VALUES (1);
INSERT INTO test1 (id) VALUES (7);
INSERT INTO test1 (id) VALUES (8);
CREATE TABLE test2 (
id INT
);
INSERT INTO test2 (id) VALUES (6);
INSERT INTO test2 (id) VALUES (7);
INSERT INTO test2 (id) VALUES (8);
查询 #1
select *
from test
intersect
select *
from test1
union
select *
from test
intersect
select *
from test2
union
select *
from test1
intersect
select *
from test2;
| id |
| --- |
| 6 |
| 7 |
| 1 |
| 8 |
解决方案
您可以将union all
所有 id 放在一起,然后对 id 进行分组:
SELECT id
FROM (
SELECT id FROM test
UNION ALL
SELECT id FROM test1
UNION ALL
SELECT id FROM test2
) sub
GROUP BY id
HAVING COUNT(id)>1;
推荐阅读
- python-3.x - 如何使用熊猫python将特定列输入数据的每天开始时间设置为0
- php - 如何修复注意:未定义的索引:第 98 行 *\sections.php 中的部分
- wordpress - 无法在wordpress中使用elementor实现博客列表来实现博客网址
- python - 使用命令行选项运行 selenium webdriver 时出现 python 异常
- php - 如何在我的网络服务器上不断运行我的时间敏感文件删除脚本
- kotlin - 关于 Kotlin 中泛型的类型参数
- android - 添加材料设计时布局预览不显示布局
- python - 如果我想根据旧列范围创建新列?
- python - 如何解决这个 deprecationWarning?
- reactjs - Material-UI:如何使用道具中的扩展运算符覆盖自定义组件的 makeStyles 类