SQL多列IN选择

时间:2013-10-21 15:39:56

标签: sql sql-server

我有一个表需要删除其他两列匹配的行。 例如:

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

我希望查询删除所有大小都很大的行,并且颜色为红色和juiced。

问题是我需要从同一个表中找出大小和颜色(因此不能使用左连接)但我要求在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一次在表中匹配两个变量,所以有什么办法可以让IN语句识别Size和Color吗?

我正在使用SQL Server 2008

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

从概念上讲 - 当您考虑 IN with multiple columns 时,您对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...')))

答案 1 :(得分: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);