1

为简单起见,使用简单的表/字段名称:

SELECT A.a
FROM A LEFT JOIN B ON A.a = B.a
WHERE B.a IS NULL
AND B.a NOT IN (
    SELECT B.a FROM B WHERE B.b = 'literal'
)

A它应该从表中返回表中a不存在字段B的行,这些行B.b等于特定值(作为参数传递)。

A.a
-------
1
2
3

B.a      B.b
-----   -----
1       'literal'
1       'abc'
2       'def'

考虑到这些数据,查询应该返回:

A.a
------
2
3
4

2 回答 2

2

我希望我能正确理解你想要达到的目标。

SELECT A.a 
FROM A
LEFT JOIN B
    ON A.a = B.a
    AND B.b = 'literal'
WHERE B.a IS NULL 

SQL小提琴

SQL Fiddle与 @Ozzyberto 具有相同的数据

于 2013-03-08T01:02:41.313 回答
0
create table A (a int)

insert into A
select 1
union all
select 2
union all
select 3

create table B (a int, b varchar(10))

insert into B
select 1, 'literal'
union all
select 2, 'abc'
union all 
select 3, 'def'

select A.a
from A
LEFT JOIN B
on A.a = B.a
where B.b <> 'literal' or B.b is null
于 2013-03-08T01:47:07.073 回答