2016-04-25 146 views
0

对于下面的表,我需要输出不在master_vehicle_inventory表的member_booking表中的行。 我还需要master_vehicle_inventory的结果,它们不在mb_startdate和mb_returndate的范围之间。Mysql加入查询失败

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) 

但它并没有给结果想。

+0

对不起......问题没有很好地格式化.... –

+0

嗨,那里,我编辑身体开始与问题,而不是一张桌子。我也试着理解你的第一个问题并重新编写它,所以它更容易理解。如果你认为这不是你想要的,请纠正它。 对于将来的问题,请缩进你的mysql查询,这样更容易阅读。为了提高你获得正确答案的机会,你可以给出一个最小的结果,以更好地形象化你的需求。 也尝试包括错误消息,如果有的话。它会帮助人们更好地帮助你!祝你好运! – cb0

+0

Thansk cb0。在这里有点新,所以没有想法在问问题时的格式化...我会记住下次 –

回答

0

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

假设\ 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 

给定的日期(NOW())返回 '2016年4月25日'(在一个 “匹配” 行是一个有点含糊规范),我们预计查询返回的行

mvi_id 
------ 
1 
4 

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

+0

谢谢100万spencer7593 ......完美工作 –