2013-03-08 30 views
1

使用簡單的表/字段名稱爲簡單起見:SQL Server查詢,不能使用子查詢

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 

回答

2

我希望我理解你正在努力實現正確的。

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

SQL Fiddle

SQL Fiddle具有相同的數據@Ozzyberto

+0

我真的不知道我可以從你的答案會發生什麼結果,我嘗試了,我得到0行返回。我添加了一個例子,希望它有助於澄清所需的結果。 – Ozzyberto 2013-03-08 01:13:34

+0

哦,我沒有注意到這個鏈接,我查了一下,看起來是對的。我的執行過程中一定有什麼問題。我會做更多的測試。 – Ozzyberto 2013-03-08 01:14:32

+0

@Ozzyberto請考慮接受答案,如果它幫助你。 – 2013-03-08 06:40:21

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