2012-05-21 28 views
0

我有一個非常大的sql語句,我必須對其進行修改。在其中一個表中有四個int列,我必須排除2組。如果我只想排除一個表的值,那很簡單,使用except語句。我可以這樣做:排除t-sql中的多個值

select * 
from Table Z 
except(
select * 
from Table Z 
where (A= 2 and B= 10 and C= 3 and D= 90) 
or (A= 2 and B= 17 and C= 100 and D= 90)) 

但是我不能讓它工作使用where語句。我只希望排除這兩組組合。在真實的聲明中,有六個不同的表格和選擇中的各種案例陳述。

我已經嘗試了一些東西,似乎沒有任何工作。

任何想法將不勝感激!

謝謝!

+0

如果EXCEPT不起作用,並且「在真實語句中,在select中有六個不同的表和各種case語句的聯接」,您可能需要仔細看看JOIN 's,其他'WHERE'條款你有,並且可能在這裏提供它們。 –

回答

4

爲什麼複雜EXCEPT?這難道不是工作?:

SELECT * 
FROM Table Z 
WHERE NOT ( (A= 2 and B= 10 and C= 3 and D= 90) 
      OR (A= 2 and B= 17 and C= 100 and D= 90) 
     ) 
0

請勿嘗試

SELECT * FROM Table1 WHERE Table1.ID NOT IN (SELECT ID FROM Table1 WHERE Somewhereclause) 

你的情況:

select * 
from Table Z 
WHERE Z.ID NOT IN (
select ID 
from Table Z 
where (A= 2 and B= 10 and C= 3 and D= 90) 
or (A= 2 and B= 17 and C= 100 and D= 90)) 
1

只需使用NOT操作:

SELECT * 
    FROM Table Z 
WHERE NOT ((A = 2 and B = 10 and C = 3 and D = 90) 
      OR (A = 2 and B = 17 and C = 100 and D = 90)) 

,或者應用De Morgan's laws

SELECT * 
    FROM Table Z 
WHERE (NOT (A = 2 and B = 10 and C = 3 and D = 90)) 
    AND (NOT (A = 2 and B = 17 and C = 100 and D = 90)) 
0

這裏有兩種方法:

SELECT * FROM TABLE Z 
    WHERE Z.ID NOT IN 
    (SELECT ID FROM TABLE Z WHERE (A= 2 AND B= 10 AND C= 3 AND D= 90) OR (A= 2 AND B= 17 AND C= 100 AND D= 90)) 

這個第二種方式可能會更好一點......不是項可能是有問題的:

SELECT * FROM TABLE Z 
    LEFT JOIN TABLE Z2 
    ON 
    Z.Id = Z2.ID 
    WHERE (Z2.A= 2 AND Z2.B= 10 AND Z2.C= 3 AND Z2.D= 90) OR (Z2.A= 2 AND Z2.B= 17 AND Z2.C= 100 AND Z2.D= 90)) WHERE Z2 IS NOT NULL 

保持密切關注,第二個......我不是它肯定100%。如果你有性能問題,我會先嚐試第一個,然後再使用第二個。

0

這將爲您提供與您的示例查詢相同的結果,並且只需要一個SELECT語句。

SELECT * 
FROM Table_Z 
WHERE NOT (A= 2 and B= 10 and C= 3 and D= 90) 
    AND NOT (A= 2 and B= 17 and C= 100 and D= 90)