平等而不平等

时间:2013-01-20 14:17:12

标签: mysql

我有这个mysql查询,它可以按指定日期获取特定数据;

SELECT id FROM mytable WHERE DAY(idate)='11' AND MONTH(idate)='01' AND YEAR(idate)='2013' GROUP BY id

现在我想从指定日期和指定日期之外的数据中获取数据,我已尝试此查询并返回零结果;

SELECT id FROM mytable WHERE DAY(idate)='11' AND DAY(idate)<>'11' AND MONTH(idate)='01' AND YEAR(idate)='2013' GROUP BY id

4 个答案:

答案 0 :(得分:1)

你的SQL:

SELECT id FROM mytable WHERE DAY(idate)='11' AND DAY(idate)<>'11' 
                       AND MONTH(idate)='01' AND YEAR(idate)='2013' GROUP BY id

说“从mytable中选择行的id,其中日期等于11且不等于11 ......”

这是一种不可能的情况,因此你什么都没得到。

你实际想要的是“从mytable中选择日期等于11的行的id以及日期不等于11的行...”,我认为。这与“从mytable中选择行的id而不管日期的值...”或者:

SELECT id FROM mytable WHERE MONTH(idate)='01' AND YEAR(idate)='2013' GROUP BY id

答案 1 :(得分:0)

尝试使用OR代替AND

SELECT id 
FROM mytable t1
WHERE DAY(idate)<>'11'
  OR ( DAY(idate) = '11' 
      AND MONTH(idate)='01' 
      AND YEAR(idate)='2013' 
    )
GROUP BY id

答案 2 :(得分:0)

您可以使用查询表中的第一个查询和subtract,也可以修改查询(请参阅De-Morgan's laws):

SELECT id
    FROM mytable 
         WHERE DAY(idate)<>'11' OR MONTH(idate)<>'01' OR MONTH(idate)='01' OR YEAR(idate)='2013'
 GROUP BY id

答案 3 :(得分:0)

您的查询目前基本上将此作为WHERE子句:

where 1 = 1
and   1 <> 1
显然两者都不可能是真的。同样,DAY(idate)上的过滤器是互斥的。很难准确理解你想要实现的目标。也许你应该完全删除DAY()上的测试?

SELECT id 
FROM mytable 
WHERE MONTH(idate)='01' 
AND YEAR(idate)='2013' 
GROUP BY id