由于where子句,Query给出了空结果

时间:2013-10-12 05:40:34

标签: mysql

Table : tbl_email_scheduler
这里date_to_send = '2013-10-12' AND send_status = NULL。 (在创建表的时候,我给send_status默认为NULL)

Mysql:

SELECT
  id,
  to_users,
  subject,
  message,
  product_id,
  date_to_send,
  send_status,
  status,
  createdate
FROM tbl_email_scheduler
WHERE date_to_send = '2013-10-12'   

给我结果

但是当我

SELECT
  id,
  to_users,
  subject,
  message,
  product_id,
  date_to_send,
  send_status,
  status,
  createdate
FROM tbl_email_scheduler
WHERE date_to_send = '2013-10-12'
    and send_status != 'Y'
它给我空洞的结果么? 请回答。

4 个答案:

答案 0 :(得分:2)

因为数据库服务器将NULL视为空,请尝试此

SELECT 
  id,
  to_users,
  subject,
  message,
  product_id,
  date_to_send,
  send_status,
  status,
  createdate
FROM tbl_email_scheduler 
WHERE date_to_send = '2013-10-12' and (send_status !='Y' OR send_status IS NULL)

答案 1 :(得分:0)

我认为你的错误在mysql'<>'

中并不相同

试试这个

SELECT id, to_users, subject, message, product_id, date_to_send, send_status, STATUS , createdate FROM tbl_email_scheduler WHERE date_to_send = '2013-10-12' AND send_status <> 'Y' LIMIT 0 , 30

答案 2 :(得分:0)

NULL的任何比较都会产生NULL。在处理NULL时,您应根据自己的需要使用以下运算符。

x IS NULL - 确定左手表达式是否为NULL,

x IS NOT NULL - 如上所述,但相反,

x <=> y - 以安全的方式比较两个操作数的相等性,即NULL被视为正常值。

答案 3 :(得分:0)

在第二个查询中,您要定义send_status是否不是Y. 这意味着如果send_status为NULL,它将不会获取任何内容。

你应该这样试试

SELECT
  id,
  to_users,
  subject,
  message,
  product_id,
  date_to_send,
  send_status,
  status,
  createdate
FROM tbl_email_scheduler
WHERE date_to_send = '2013-10-12'
    and (send_status != 'Y' AND send_status IS NOT NULL)

这将首先获取所有非空结果,并且不应用等于Y条件