Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Nakładające się zapytanie o rezerwację

Rozważ następujące kwestie.

DROP TABLE IF EXISTS apartment;

CREATE TABLE apartment
(apartment_id SERIAL PRIMARY KEY
,apartment_name varchar(255) NOT NULL 
);

INSERT INTO apartment VALUES
(1, 'Apartment 1'),
(2, 'Apartment 2'),
(3, 'Apartment 3'),
(4, 'Apartment 4');

DROP TABLE IF EXISTS booking;

CREATE TABLE booking 
(booking_id SERIAL PRIMARY KEY
,start_date DATE NOT NULL
,end_date DATE NOT NULL
,apartment_id INT NOT NULL
);

INSERT INTO booking VALUES
(1, '2018-07-18', '2018-07-20', 1),
(2, '2018-07-21', '2018-07-23', 1),
(3, '2018-07-18', '2018-07-20', 2);



SELECT a.* 
  FROM apartment a 
  LEFT 
  JOIN booking b 
    ON b.apartment_id = a.apartment_id 
   AND b.start_date <= '2018-07-23' 
   AND b.end_date > '2018-07-21'
 WHERE b.booking_id IS NULL;
+--------------+----------------+
| apartment_id | apartment_name |
+--------------+----------------+
|            2 | Apartment 2    |
|            3 | Apartment 3    |
|            4 | Apartment 4    |
+--------------+----------------+

W praktyce, o ile nie jest związany z transakcją, taki SELECT jest raczej bez znaczenia, ponieważ inny użytkownik może łatwo przyjść i dokonać rezerwacji, podczas gdy Ty wciąż sprawdzasz dostępność.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Samouczek MySQL:instrukcja MySQL IN (zaawansowane)

  2. MySQL SELECT AS łączy dwie kolumny w jedną

  3. Jak zablokować wiersz InnoDB, który jeszcze nie istnieje?

  4. MySQL JAK IN()?

  5. Laravel - Nieprawidłowy numer parametru:parametr nie został zdefiniowany