Tôi có hai bàn, một cái để mở và cái kia để đặt. Một mục trong bảng đặt phòng luôn đề cập đến việc mở và có thể có nhiều đặt chỗ cho mỗi lần mở. Tôi muốn trích xuất tất cả các lần mở có đặt phòng khác với bookingType 'C'
.Truy vấn SQL - Tôi đang đi sai ở đâu?
Ví dụ:
nếu một khe hở có 3 việc đặt các loại A, B và C, nó nên không hiển thị trong kết quả
nếu một khe hở chỉ có đặt loại A và B, nó sẽ hiển thị lên trong kết quả
sau đây là những gì tôi đã cố gắng nhưng nó không phải là chính xác vì nó không cho ví dụ 1:
select op.id, bo.id
from opening op
left join booking bo on bo.openingId = op.id
where bo.bookingType != 'C';
Dưới đây là các truy vấn hoàn chỉnh đề cập đến khoảng thời gian:
select op.id, bo.id
from opening op
left join booking bo on bo.openingId = op.id
where ((bo.arrivalDate < '2009/06/20' AND bo.departureDate <= '2009/06/20') OR
(bo.arrivalDate >= '2009/06/27' AND bo.departureDate > '2009/06/27'))
Những gì tôi sử dụng để gọi bookingType
thực sự là một khoảng thời gian được xác định thông qua hai cột arrivalDate
và departureDate
: trong ví dụ trên, chúng tôi cần tất cả các các lỗ trống KHÔNG đặt trước giữa 20th June 2009
và 27th June 2009
.
Bạn có cấu trúc bảng của bạn? Điều này cũng giống như bài tập về nhà. –
TABLE mở id INT NOT NULL mô tả VARCHAR (60) PRIMARY KEY (id) TABLE đặt phòng id INT NOT NULL, openingId INT NOT NULL, arrivalDate DATETIME NOT NULL, departureDate DATETIME NOT NULL, TIỂU KEY (id) Tôi đang cố gắng trích xuất tất cả các lần mở có sẵn trong một khoảng thời gian nhất định (ví dụ: từ ngày 20-06-2009 đến ngày 27-06-2009) –
trong đó loại đặt chỗ trong ví dụ trên là gì? – akf