我想请求帮助理解这段代码......我是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_reservations中存在设备bcode,请勿显示它。 - 如果设备bcode存在于tbl_reservations中,但没有用户将指定的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和时间END,因为我的系统每天不允许超过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;
答案 0 :(得分:3)
好的,我会尝试解释,希望你能理解;
SELECT b.bcode // Selecting the bCode from tbl_items and tbl_items_bulk
FROM (SELECT bcode FROM tbl_items
UNION
SELECT bcode FROM tbl_items_bulk
) b left outer join // join to tbl_reservation where the bcode is equal and in
a given timespan (USERTO & USERFROM are 2 variables
passed from outside)
tbl_reservation r
on b.bcode = r.bcode and
@USERTO <= r.ToDate and
@USERFROM >= r.FromDate
WHERE r.bcode is null; // and where your selected bcode is equal to null
答案 1 :(得分:2)
有效地,您的查询会显示表tbl_items
和tbl_bulk_items
中tbl_reservations
表的bcode列中没有匹配项的所有bcode值。
这样的查询可以更有效地完成:
SELECT t.bcode
FROM (
SELECT bcode
FROM tbl_items
UNION
SELECT bcode
FROM tbl_items_bulk
) AS t
WHERE NOT EXISTS (
SELECT *
FROM tbl_reservation AS r
WHERE r.bcode=t.bcode
AND r.toDate>='20130916 07:00:00' AND r.fromDate<='20130916 22:00:00'
)
答案 2 :(得分:0)
此代码的结果不算什么,因为此案例on b.bcode = r.bcode
是WHERE r.bcode is null;
的例外