0

次のSQLをJPQLに変換しようとしています。

SELECT  *
FROM    rooms
WHERE   NOT EXISTS
(        
    SELECT  *
    FROM    booking, booking_has_rooms
    WHERE   rooms.number=booking_has_rooms.rooms_number AND 
            booking.booking_id=booking_has_rooms.booking_booking_id AND 
            :date BETWEEN booking.checkin AND booking.checkout
);

これまでのところ、私はこれを持っています:

SELECT rooms 
FROM Rooms rooms 
WHERE NOT EXISTS 
(
    SELECT bk 
    FROM Booking b 
    JOIN  b.roomsCollection bk 
    WHERE :date BETWEEN b.checkin AND b.checkout
)

指定された日に予約がない場合、すべての部屋が正しく返されます。ただし、指定された日付に予約があった場合、部屋はまったく返されません。

4

1 に答える 1

1

内部クエリに句がありません:

SELECT rooms 
FROM Rooms rooms 
WHERE NOT EXISTS 
(
    SELECT bk 
    FROM Booking b 
    JOIN  b.roomsCollection bk 
    WHERE :date BETWEEN b.checkin AND b.checkout
    and bk.id = rooms.id
)

Roomsの名前をRoomに変更すると、コードがはるかに明確になります。各インスタンスは単一の部屋であるため、単数形を使用する必要があります。

于 2013-02-02T20:16:36.237 に答える