2016-12-15 20 views
-3

有没有办法确保NOT IN子句中的所有值都匹配?在NOT IN子句中匹配所有值

实施例:

我有一个表则DateValue 2列的日期和价值

ID======== DATE ============VALUE 
1========2015-01-01=========== 12 
2========2015-01-01=========== 13 
3========2015-01-01=========== 15 
4========2015-01-01=========== 16 
5========2015-01-02========== 15 
6========2015-01-04=========== 15 
7========2015-01-05=========== 16 
8========2015-01-06=========== 12 
9========2015-01-06=========== 13 
10========2015-01-06=========== 15 

如何选择所有行,其中VALUE未= 12,13和15在同一天

= >这意味着我会回来:

5========2015-01-02========== 15 
6========2015-01-04=========== 15 
7========2015-01-05=========== 16 
+0

VALUE NOT IN(12,13,15); –

+2

继续。尝试一下。也许从稍微简单的东西开始(如WHERE所有值都匹配) – Strawberry

+0

它将返回行的值不在12,13或15.我需要它匹配NOT IN子句中的所有值,朋友:) – AskToBeAsked

回答

0

我找到了解决方案:

SELECT * 
FROM `DateValue` 
WHERE `Date` NOT IN (
    SELECT DISTINCT `Date` 
    FROM `result` 
    WHERE VALUE IN (12,13,15) 
) 

谁有更好的解决方案(不要使用子查询)?

+0

这个查询不会运行,因为内部查询返回有3列的行,而外部查询试图匹配'VALUE'(只有一列)。即使它运行,它也不会返回你所要求的结果。它应该包含当天的状况。 – axiac

+0

非常抱歉,是的。你是对的。我刚更新了它:) – AskToBeAsked

0

在你能找到的日期时,VALUE具有的所有值(121315)第一步:

SELECT `DATE` 
FROM DateValue 
WHERE `VALUE` IN (12, 13, 15) 
GROUP BY `DATE` 
HAVING COUNT(*) = 3 

您可以使用它作为一个子查询来得到你所需要的值:

SELECT * 
FROM DateValue 
WHERE `DATE` NOT IN (
    SELECT `DATE` 
    FROM DateValue 
    WHERE `VALUE` IN (12, 13, 15) 
    GROUP BY `DATE` 
    HAVING COUNT(*) = 3 
) a 
+0

你说得对。非常感谢你:) – AskToBeAsked

+0

但我认为不需要“GROUP BY'DATE'HAVING COUNT(*)= 3” – AskToBeAsked