2013-10-21 104 views
0

我有一個表需要行刪除其他兩列匹配。 因此,例如:SQL多列IN選擇

Apples | Size | Colour | Juiced 
1  | big | red | Yes 
2  | small | green | No 

我希望查詢刪除具有規模大,而且顏色鮮紅,並榨汁所有行。

問題是我需要從同一個表中找出大小和顏色(所以不能使用左連接),但我需要在IN語句中使用此表。 我試圖使用IN選擇像行:

SELECT * from table WHERE (Juiced <> 'No') OR 
(Juiced LIKE 'yes' AND (Size, Colour IN (SELECT Size, Colour FROM table WHERE blah=blah))); 

SQL不允許兩個變量同時使用表中進行匹配,那麼有沒有什麼辦法可以同時獲得字號和顏色被IN聲明認可?

我正在使用SQL Server 2008

任何幫助非常感謝!

+1

@Bridge看起來不像有任何東西都不在我身邊,但可能它被編輯了。 –

+0

是的道歉,我編輯它! – DJB

+0

難道你不能'加入你的表在一起,並測試適當的列? – HABO

回答

1

概念 - 當你用多列想着IN您想EXISTS

SELECT * 
FROM table T 
WHERE (Juiced <> 'No') OR (Juiced LIKE 'yes' AND 
              (EXISTS (SELECT Size, Colour 
                FROM [table] A 
                WHERE A.Apples = T.Apples AND 
                  -- put your 'balhh here...'))) 
+0

如上所述 - 在這種情況下,你應該用'='替換'LIKE'。 –

+0

使用這個,它完全解決它,謝謝所有 - 使我的理解更好! – DJB

0

你可以做這樣的事情:

SELECT * FROM table 
LEFT JOIN (
    SELECT Size, Colour 
    FROM anotherTable 
    WHERE condition 
) anotherTable ON table.Size = anotherTable.Size AND table.Colour = anotherTable.Colour 
WHERE (Juiced <> 'No') -- should this be (Juiced = 'No')? 
OR (Juiced LIKE 'yes' AND anotherTable.Size IS NOT NULL); 
+0

尚未檢查是否可行,因爲它已解決 - 但謝謝! – DJB