我的连接sql查询不会带来结果

时间:2014-02-03 20:16:54

标签: mysql sql inner-join

我的SQL查询有什么问题,我想从两个表中检索满足WHERE条件的数据

SELECT *, UNIX_TIMESTAMP(i.sent_date) AS udate
FROM ibc_sent_history as i INNER JOIN
     ibc_messages as u
     ON i.msg_ids = u.id 
WHERE (i.sent_date >= '02-02-2013' AND i.sent_date <= '02-02-2014')
ORDER BY i.sent_date
LIMIT 200

2 个答案:

答案 0 :(得分:1)

我不太了解MySQL,但在运行时使用SQL Fiddle:

CAST('2014-02-02' AS DATE)

当我跑步时,我得到了约会

CAST('02-02-2014' AS DATE)

我得到NULL,所以您的日期格式似乎错了。

演示:SQL Fiddle

答案 1 :(得分:1)

假设您的ibc_sent_history.sent_date数据类型是DATETIME,这里有一种重构此查询的方法。 (即使数据类型为DATE,这也会起作用)。您需要将日期输入字符串格式从02-02-2013更改为更标准的'2014-02-02`(YYYY-MM-DD)。

    SELECT whatever, whatever
      FROM ibc_sent_history AS i 
INNER JOIN ibc_messages AS u ON i.msg_ids = u.id 
     WHERE i.sent_date >= '2013-02-02'
       AND i.sent_date <  '2014-02-02' + INTERVAL 1 DAY
  ORDER BY i.sent_date DESC
     LIMIT 200

我更改了ORDER BY以包含DESC。这是为了返回最新的项目,而不是最旧的项目。如果那不是您所需要的,请取下DESC。

我更改了日期格式。

我将选择范围的结尾更改为

   i.sent_date <  '2014-02-02` + INTERVAL 1 DAY

那是因为

   i.sent_date <=  '2014-02-02`

将包含恰好在2014年2月2日午夜发生的项目,但不包括当天的任何其他项目。您可能想要的是在第二天发生但不包括午夜的物品。