Mysql连接查询失败

时间:2016-04-25 13:37:08

标签: mysql

对于下表,我需要从master_vehicle_inventory表输出不在member_booking表中的行。 我还需要master_vehicle_inventory的结果,它不属于mb_startdate和mb_returndate的范围。

master_vehicle_inventory table
mvi_id  
1          
2           
3        
4

member_booking table

   mb_id   mb_startdate   mb_returndate    mvi_id
    100      22-04-2016      30-04-2016       2
    101      23-01-2016      02-05-2016       3

到目前为止,我已经尝试过这个:

SELECT
    mb.mb_id,
    mb.mb_startdate,
    mb.mb_returndate,
    mvi.mvi_id
FROM master_vehicle_inventory AS mvi LEFT JOIN LEFT
    JOIN member_booking AS mb ON mvi.mvi_id = mb.mvi_id
WHERE CURDATE() NOT BETWEEN mb.mb_startdate
      AND mb.mb_returndate
      AND mvi.mvi_id NOT IN (SELECT mvi.mvi_id
                             FROM member_booking)

但它并没有给出想要的结果。

1 个答案:

答案 0 :(得分:0)

要从`member_booking`表中的`master_vehicle_inventory`中返回没有“匹配”行的行,我们可以使用反连接模式。

假设\ mb_startdate`和`mb_enddate`被定义为数据类型DATE。

这样的事情:

SELECT mvi.mvi_id
  FROM master_vehicle_inventory mvi
  LEFT
  JOIN member_booking mb
    ON mb.mvi_id       =  mvi.mvi_id
   AND mb.mb_startdate <= DATE(NOW())
   AND mb.mb_enddate   >  DATE(NOW())
 WHERE mb.mvi_id IS NULL

(“匹配”行的规范有点模糊。)

鉴于DATE(NOW())返回'2016-04-25',我们希望该查询返回行

mvi_id
------
1
4

(我们怀疑列的数据类型可能不是DATE,因为示例数据中显示的值是我们期望为DATE表达式返回的YYYY-MM-DD格式的。 )