You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求可对比数据库中三张表的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:47:02