Tsql 即使条件不是提取记录,也返回记录

Tsql 即使条件不是提取记录,也返回记录,tsql,Tsql,我有两张桌子e和o1 其中表e中 Onumber edt_image 1 AA 1 AB 1 AC 1 AA 1 AB 2 AB 3 AB 3 AA 并且表o1已经 Onumber Obill 1 ABCD 2 ABCD 3

我有两张桌子e和o1 其中表
e

Onumber        edt_image
1       AA
1       AB
1       AC
1       AA
1       AB
2       AB
3       AB
3       AA
并且表
o1
已经

Onumber         Obill      
1                           ABCD
2                           ABCD  
3                            ABCD
所以,当我想让sql把我拉到没有AA和obill“ABCD”的记忆中时,我的意思是

Onumber         edt_image
2       AB
但现在它吸引着我

Onumber Edt_image
1       AB
1       AC
1       AB
2       AB
3       AB
我使用的sql

Select e.onumber,o1.onumber
From e join o1 on o1.onumber=e.onumber
Where e.edt_image<>’AA’
And o1.obill=ABCD
选择e.onumber,o1.onumber
从e加入o1上的o1。onumber=e.onumber
其中e.edt_图像“AA”
和o1.obill=ABCD

使用
存在
不存在

SELECT *
FROM e e1
WHERE NOT EXISTS(SELECT 1 FROM e
                 WHERE Onumber = e1.Onumber
                 AND edt_image = 'AA')
AND EXISTS( SELECT 1 FROM o1
            WHERE Onumber = e1.Onumber
            AND Obill = 'ABCD');

试试这个。希望能有帮助

如果您正在运行更大结果集的查询,请考虑在连接键上添加索引。 注意,在添加任何索引之前,请查看对服务器的更大影响

;WITH cte_e (Onumber,edt_image) AS
(
SELECT 1, 'AA' UNION ALL
SELECT 1, 'AB' UNION ALL
SELECT 1, 'AC' UNION ALL
SELECT 1, 'AA' UNION ALL
SELECT 1, 'AB' UNION ALL
SELECT 2, 'AB' UNION ALL
SELECT 3, 'AB' UNION ALL
SELECT 3, 'AA'
), cte_O1(Onumber, Obill)  AS
(
SELECT 1, 'ABCD' UNION ALL
SELECT 2, 'ABCD' UNION ALL 
SELECT 3, 'ABCD'
)
SELECT e1.onumber,
    e1.edt_image
FROM cte_e e1
INNER JOIN cte_O1 o1
    ON o1.Onumber = e1.Onumber
WHERE NOT EXISTS (
        SELECT 1
        FROM cte_e e2
        WHERE e1.Onumber = e2.Onumber
            AND edt_image = 'AA'
        )

谢谢你的回答!我试过了,它太慢了,无法给出任何结果……还有其他解决方案吗?我在selects语句中使用了它,它起了作用。谢谢大家!!