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が存在しないテーブルから行を返すことになっています。BB.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フィドル

@Ozzybertoと同じデータを使用するSQLFiddle

于 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 に答える