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

如何基于同表其他行过滤数据?SQL筛选job1行求助

过滤Job1中与Job2存在相同ID的数据行

首先是测试用的建表和插入数据SQL:

CREATE TABLE YourTableName 
(
    Id UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
    Job VARCHAR(255),
    Action VARCHAR(MAX)
);

INSERT INTO YourTableName (Job, Action)
VALUES
    ('job1', '1E2B7D03-955E-46B0-BE35-0506C01CF68D/job1'),
    ('job1', '2CE87455-0AC5-4F5A-B0EA-66D8279E81D1/job1'),
    ('job1', '3CE87455-0AC5-4F5A-B0EA-66D8279E81D1/job1');
    
INSERT INTO YourTableName (Job, Action)
VALUES
    ('job2','1E2B7D03-955E-46B0-BE35-0506C01CF68D/job2'),
    ('job2','4E2B7D03-955E-46B0-BE35-0506C01CF68D/job2');

需求说明

获取所有Job为'job1'的数据行,但如果某行Action字段里的ID部分(/之前的字符串),在Job为'job2'的行中存在相同ID,则排除该行。

预期结果

('job1', '2CE87455-0AC5-4F5A-B0EA-66D8279E81D1/job1')
('job1', '3CE87455-0AC5-4F5A-B0EA-66D8279E81D1/job1')

原因:第一条job1数据的Action中的ID(1E2B7D03-955E-46B0-BE35-0506C01CF68D)在job2的数据行中存在,因此需排除。

尝试方案的问题

你之前写的子查询逻辑有误,错误地截取了/后面的部分进行匹配,导致结果不符合预期:

SELECT *
FROM YourTableName j1
WHERE Job = 'job1'
  AND NOT EXISTS (SELECT 1
                  FROM YourTableName j2
                  WHERE Job = 'job2'
                    AND SUBSTRING(j1.Action, CHARINDEX('/', j1.Action) + 1, 36) = SUBSTRING(j2.Action, CHARINDEX('/', j2.Action) + 1, 36)
);

正确的SQL查询语句

SELECT *
FROM YourTableName j1
WHERE Job = 'job1'
  AND NOT EXISTS (
    SELECT 1
    FROM YourTableName j2
    WHERE Job = 'job2'
      AND LEFT(j1.Action, CHARINDEX('/', j1.Action) - 1) = LEFT(j2.Action, CHARINDEX('/', j2.Action) - 1)
);

逻辑解释

  • LEFT(j1.Action, CHARINDEX('/', j1.Action) - 1):从Action字段中提取/之前的ID字符串,这才是需要匹配的核心内容。
  • NOT EXISTS子查询会检查job2中是否存在相同ID的行,若存在则排除对应的job1行,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:51:03