我想在理解这段代码方面寻求帮助......我是 mysql 的初学者,所以我发现很难阅读这段代码的作用......
SELECT b.bcode
FROM (SELECT bcode FROM tbl_items
UNION
SELECT bcode FROM tbl_items_bulk
) b left outer join
tbl_reservation r
on b.bcode = r.bcode and
@USERTO <= r.ToDate and
@USERFROM >= r.FromDate
WHERE r.bcode is null;
有人能帮我理解这段代码的作用吗?提前致谢!
@Ashutosh Arya,我试图获取尚未为日期和时间跨度保留的所有项目。通过“保留”,设备应该存在于 tbl_reservations 中。我只是想与在特定日期和时间跨度内获得所有设备相反。
逻辑:
- 获取当前存在于 tbl_items, tbl_items_bulk(UNION) 中的所有设备 bcode。
- 获取当前存在于 tbl_reservations 中的所有设备 bcode,并查看是否与编号 1 中的 UNION 匹配。
- 如果有匹配项,请使用 resDate(reservation date) 进一步过滤结果。**这将导致不显示具有用户指定的 resDate 的所有 bcode。
- 如果仍有匹配项,请使用 timeSTART 和 timeEND 进一步过滤结果。
意思是说,-如果 tbl_reservations 中存在设备 bcode,请不要显示它。- 如果 tbl_reservations 中存在设备 bcode,但没有用户指定的 resDate,则显示它。-如果tbl_reservations中存在设备bcode,具有用户将指定的resDate,但没有timeStart和timeEnd涵盖的时间,则显示它。
我的代码似乎只检查日期。我正在考虑检查日期和时间的东西,例如:
SELECT b.*
FROM (SELECT * FROM tbl_items
UNION
SELECT * FROM tbl_items_bulk
) b left outer join
tbl_test t
on b.bcode = t.bcode and
'2013-09-16' = t.resDate AND
'9:30' <= t.timeSTART AND
'7:00' >= t.timeEND
WHERE t.bcode is null;
而且,我的系统不允许长时间借用设备。任何人都不能在上午 7:00 至晚上 9:00(15 小时)内借用设备。
这是最新代码(timeFROM 和 timeTO 更改为 timeSTART 和 timeEND,因为我的系统每天不允许超过 15 小时的预订,并且不允许超过 1 天的预订):
SELECT b.*
FROM (SELECT * FROM tbl_items
UNION
SELECT * FROM tbl_items_bulk
) b left outer join
tbl_test t
on b.bcode = t.bcode and
NOT ('4:30' < t.timeSTART OR '7:00' > t.timeEND)
WHERE t.bcode is null;