2013-10-21 71 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