我有这个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
答案 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