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

通过表对比筛选数据:提取Table A中不在Table B指定列的内容

实现方案

根据你的需求,要筛选出Table A的column_1中既不在Table B的column_1,也不在Table B的column_2数组中的值,以下是不同SQL数据库的具体实现方式:

MySQL(8.0+版本)

如果Table B的column_2是JSON格式数组,可以用JSON_TABLE拆分数组后做排除:

SELECT a.column_1
FROM TableA a
WHERE NOT EXISTS (
    SELECT 1 FROM TableB b WHERE b.column_1 = a.column_1
)
AND NOT EXISTS (
    SELECT 1
    FROM TableB b
    JOIN JSON_TABLE(
        b.column_2,
        '$[*]' COLUMNS(val VARCHAR(255) PATH '$')
    ) jt
    WHERE jt.val = a.column_1
);

如果column_2是字符串形式的数组(比如[a,b,c,d]),先清理字符串再拆分:

SELECT a.column_1
FROM TableA a
WHERE NOT EXISTS (SELECT 1 FROM TableB b WHERE b.column_1 = a.column_1)
AND NOT EXISTS (
    SELECT 1
    FROM TableB b
    JOIN STRING_SPLIT(TRIM(BOTH '[]' FROM b.column_2), ',') jt
    WHERE jt.value = a.column_1
);

PostgreSQL

PostgreSQL对数组的原生支持很好,有两种常用写法:

写法1:用数组包含操作符@>

SELECT a.column_1
FROM TableA a
WHERE a.column_1 NOT IN (SELECT column_1 FROM TableB)
AND NOT EXISTS (
    SELECT 1 FROM TableB b WHERE b.column_2 @> ARRAY[a.column_1]::TEXT[]
);

写法2:拆分数组后用NOT IN

SELECT a.column_1
FROM TableA a
WHERE a.column_1 NOT IN (SELECT column_1 FROM TableB)
AND a.column_1 NOT IN (SELECT UNNEST(column_2) FROM TableB);

SQL Server

用OPENJSON解析JSON数组,再做排除逻辑:

SELECT a.column_1
FROM TableA a
WHERE NOT EXISTS (
    SELECT 1 FROM TableB b WHERE b.column_1 = a.column_1
)
AND NOT EXISTS (
    SELECT 1
    FROM TableB b
    CROSS APPLY OPENJSON(b.column_2) WITH (val VARCHAR(255) '$') jt
    WHERE jt.val = a.column_1
);

内容的提问来源于stack exchange,提问作者user16462786

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:05:17