求可对比数据库中三张表的SQL查询语句(返回Yes/No结果)
解决表字段跨表存在性对比的SQL查询方案
嘿,我来帮你搞定这个需求!咱们的目标是检查表1的每个字段是否同时存在于表2和表3,满足条件返回Yes,不满足就返回No对吧?下面分不同数据库系统给你具体的实现方案:
通用思路
核心逻辑是:先获取表1的所有字段列表,然后对每个字段分别验证它是否在表2和表3的字段集合中,最后通过条件判断输出结果。
针对MySQL/MariaDB的实现
SELECT c.COLUMN_NAME AS `表1字段`, CASE -- 同时检查表2和表3是否存在当前字段 WHEN EXISTS (SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_NAME = '表2' AND COLUMN_NAME = c.COLUMN_NAME) AND EXISTS (SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_NAME = '表3' AND COLUMN_NAME = c.COLUMN_NAME) THEN 'Yes' ELSE 'No' END AS `存在结果` FROM information_schema.COLUMNS c WHERE c.TABLE_NAME = '表1';
针对SQL Server的实现
SELECT col.name AS `表1字段`, CASE WHEN EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID('表2') AND name = col.name) AND EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID('表3') AND name = col.name) THEN 'Yes' ELSE 'No' END AS `存在结果` FROM sys.columns col WHERE col.object_id = OBJECT_ID('表1');
针对Oracle的实现
SELECT utc.COLUMN_NAME AS "表1字段", CASE WHEN EXISTS (SELECT 1 FROM user_tab_columns WHERE TABLE_NAME = '表2' AND COLUMN_NAME = utc.COLUMN_NAME) AND EXISTS (SELECT 1 FROM user_tab_columns WHERE TABLE_NAME = '表3' AND COLUMN_NAME = utc.COLUMN_NAME) THEN 'Yes' ELSE 'No' END AS "存在结果" FROM user_tab_columns utc WHERE utc.TABLE_NAME = '表1';
验证你的例子
按照你给出的场景:
- 字段
A:不存在于表2,但存在于表3 → 第一个EXISTS条件不成立,所以返回No - 字段
B:同时存在于表2和表3 → 两个EXISTS都成立,返回Yes
完全符合你的需求哦!
注意:记得把SQL里的
表1、表2、表3替换成你实际的表名,大小写要和数据库中的表名一致(部分数据库区分大小写)。
内容的提问来源于stack exchange,提问作者Vikas
相关产品推荐
相关产品推荐

