我想知道是否有人可以帮我查询我的mysql数据库的可用性。
sooo,我有两个表:tbl_items(单位项目)和tbl_reservations。
tbl_reservations
-barcode
-dateReserved
-timeStart
-timeEnd
tbl_items
-barcode
-itemName
-itemDesc
我想做的是这样的事情(请参考图片):
到目前为止,这是我的查询:
SELECT a.bcode, b.resdate, b.timestart, b.timeend
FROM tbl_items a
INNER JOIN tbl_reservations b
on a.bcode=b.bcode
WHERE a.bcode
not in
(
Select bcode
FROM tbl_reservations
WHERE bcode not in
(
SELECT bcode
FROM tbl_reservations
where resdate='2013-09-25' AND retdate is null
)
AND ((timestart < '10:00'AND timeend < '10:00')
AND (timestart > '15:00' AND timeend > '15:00'))
)
但即使使用这么长的代码,它仍然允许一些已经预订或应该无法显示的设备。
任何帮助?
谢谢! :d
带有保留的结果集的屏幕截图,我的意思是不包含在结果集中:
突出显示的是与上面代码中的条件重叠的那些......
更新:这是新代码......我很惊讶,因为它在10:00之前返回了包含timestart和timeend的行。
select rsv.controlno, rsv.bcode, rsv.resdate, rsv.timestart, rsv.timeend
FROM
(
select bcode
from tbl_items
) i
inner join tbl_reservations rsv
on i.bcode=rsv.bcode
WHERE resdate='2013-09-25' AND NOT (rsv.timeend > '10:00' AND rsv.timestart < '15:00');
答案 0 :(得分:0)
尝试以下代码。我相信为一个OR切换一个AND就可以了。外部AND要求其中一个条件为真。内部OR将在期间之前获取预订,或在期间之外获取预订,但在期间内没有。
SELECT a.bcode, b.resdate, b.timestart, b.timeend
FROM tbl_items a
INNER JOIN tbl_reservations b
on a.bcode=b.bcode
WHERE a.bcode
not in
(
Select bcode
FROM tbl_reservations
WHERE bcode not in
(
SELECT bcode
FROM tbl_reservations
where resdate='2013-09-25' AND retdate is null
)
AND
((timestart < '10:00' AND timeend < '10:00')
OR (timestart > '15:00' AND timeend > '15:00')
)
)
在一段时间内将AND切换为OR。