对于下表,我需要从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)
但它并没有给出想要的结果。
答案 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格式的不。 )