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

如何使用MINUS运算符查询无对应internal类别的sale交易

解决方法:获取有sale类别但无对应internal类别的交易记录

方法1:使用NOT EXISTS(推荐)

SELECT t1.*
FROM transaction t1
WHERE t1.transaction_category = 'sale'
AND NOT EXISTS (
    SELECT 1
    FROM transaction t2
    WHERE t2.transaction_id = t1.transaction_id
    AND t2.transaction_category = 'internal'
);

逻辑说明:主查询筛选所有交易类别为sale的记录,子查询检查同一transaction_id下是否存在internal类别记录。若不存在,则保留该sale记录。

方法2:使用LEFT JOIN + IS NULL

SELECT t1.*
FROM transaction t1
LEFT JOIN transaction t2 
    ON t1.transaction_id = t2.transaction_id
    AND t2.transaction_category = 'internal'
WHERE t1.transaction_category = 'sale'
AND t2.transaction_id IS NULL;

逻辑说明:将sale记录与同ID的internal记录左连接,未匹配到internal记录的行中,t2的字段会为NULL,通过筛选该条件得到目标结果。

方法3:使用MINUS运算符实现

如果坚持使用MINUS,可通过先筛选出符合条件的transaction_id,再关联原表获取完整记录:

SELECT t.*
FROM transaction t
WHERE t.transaction_category = 'sale'
AND t.transaction_id IN (
    -- 所有包含sale的transaction_id
    SELECT transaction_id
    FROM transaction
    WHERE transaction_category = 'sale'
    MINUS
    -- 所有包含internal的transaction_id
    SELECT transaction_id
    FROM transaction
    WHERE transaction_category = 'internal'
);

逻辑说明:MINUS运算得到“有sale但无internal”的交易ID集合,再通过该集合筛选原表中的sale记录。

性能说明

由于表数据仅约5000行,即使无索引,上述三种方法的执行效率都能满足需求。若后续数据量增大,建议创建(transaction_id, transaction_category)联合索引,可大幅提升查询速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:01:35