我有三个MySQL表,如下所示:
库存表
sn | hostname
-----------------------
1234 host123
2345 host456
4567 host789
6789 host910预约表
orderid | serial | start_date | end_date
----------------------------------------------------------
1 1234 2015-09-10 2015-10-25
2 2345 2015-10-21 2016-02-01
2 4567 2015-10-21 2016-02-01
3 6789 2015-08-01 2015-12-31顺序明细表
order_id | assigned_to
---------------------------------
1 Mark
2 John
3 Paul我试图对所有三个表执行如下查询:
SELECT `serial`, `hostname`, `orderid`, `start_date`, `end_date`, `assigned_to`
FROM `reservation`, `inventory`, `orders`
WHERE `sn` IN(SELECT `serial`
FROM `reservation`
WHERE '2015-12-10' <= `end_date` AND '2015-12-10' >= `start_date`)
AND `serial` = `sn` AND `orderid` = `order_id`在我的查询示例中,我只想显示适合我选择的日期范围内的结果,但是不管我选择的日期范围如何,我最终都会得到所有的结果。示例查询结果如下:
serial | hostname | orderid | start_date | end_date | assigned_to
-----------------------------------------------------------------------------------------
1234 host123 1 2015-09-10 2015-10-25 Mark
2345 host456 2 2015-10-21 2016-02-01 John
4567 host789 2 2015-10-21 2016-02-01 John
6789 hout910 3 2015-08-01 2015-12-31 Paul但是,基于上面的示例查询,我想要的结果是:
serial | hostname | orderid | start_date | end_date | assigned_to
-----------------------------------------------------------------------------------------
2345 host456 2 2015-10-21 2016-02-01 John
4567 host789 2 2015-10-21 2016-02-01 John
6789 hout910 3 2015-08-01 2015-12-31 Paul我的查询做错了什么,如何才能达到预期的结果?我在INNER JOINS上也尝试过同样的方法,但最终得到了相同的结果。
发布于 2015-12-10 22:02:08
我会摆脱子查询,因为它是不必要的。在我做的时候我也会做正确的加入。
SELECT
`serial`, `hostname`, `orderid`, `start_date`, `end_date`, `assigned_to`
FROM
`inventory`
JOIN
`reservation` ON `serial` = `sn`
JOIN
`orders` ON `order_id` = `orderid`
WHERE
`start_date` <= '2016-12-10' AND `start_date` >= '2015-12-10'https://stackoverflow.com/questions/34212221
复制相似问题