Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

HQL / JPA tìm các mặt hàng có sẵn trong phạm vi ngày

Tôi thấy truy vấn của bạn là đúng.

Nhưng nếu bạn muốn chọn dựa trên id xe, vì vậy bạn cũng nên thêm id xe làm điều kiện vào truy vấn của mình

Ví dụ

SELECT b.id, b.startDate, b.endDate, b.car.id
FROM BorrowedDate b
WHERE :userDateStart NOT BETWEEN b.startDate AND b.endDate
AND :userDateEnd NOT BETWEEN b.startDate AND b.endDate
AND b.car.id = :carId

HOẶC bạn cũng có thể làm như vậy

SELECT b.id, b.startDate, b.endDate, c.id
FROM BorrowedDate b INNER JOIN b.car c
WHERE :userDateStart NOT BETWEEN b.startDate AND b.endDate
AND :userDateEnd NOT BETWEEN b.startDate AND b.endDate
AND c.id = :carId

thì bạn phải vượt qua:giá trị carId bằng 2

CẬP NHẬT

bạn có thể thử truy vấn SQL này nếu bạn cần nhận kết quả động, tôi sẽ sớm cập nhật nó với JPQL

SELECT b.id, b.startDate, b.endDate, b.car.id
FROM BorrowedDate b
WHERE '2017-04-02 00:00:00' NOT BETWEEN b.startDate AND b.endDate
AND '2017-04-10 00:00:00' NOT BETWEEN b.startDate AND b.endDate
AND b.car.id NOT IN (SELECT DISTINCT bd.car.id FROM BorrowedDate bd WHERE '2017-04-02 00:00:00' BETWEEN bd.startDate AND bd.endDate OR '2017-04-10 00:00:00' BETWEEN bd.startDate AND bd.endDate) 

ĐÂY là JPQL quá

SELECT model.id, model.startDate, model.endDate, model.car.id
FROM BorrowedDate model
WHERE :userDateStart NOT BETWEEN model.startDate AND model.endDate
AND :userDateEnd NOT BETWEEN model.startDate AND model.endDate
AND model.car.id NOT IN (SELECT DISTINCT b.car.id FROM BorrowedDate b WHERE :userDateStart BETWEEN b.startDate AND b.endDate OR :userDateEnd BETWEEN b.startDate AND b.endDate)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CodeIgniter- bản ghi hoạt động chèn nếu mới hoặc cập nhật trùng lặp

  2. Nút Thích PHP / MySQL

  3. mysql ERROR 1064 (42000):Bạn có lỗi trong cú pháp SQL của mình;

  4. Thủ tục lưu trữ MySQL:Tham số OUT không được đặt

  5. Thông báo ClusterControl 1.7.2:Sao lưu và hỗ trợ PostgreSQL được cải thiện cho TimescaleDB &MySQL 8.0