sql >> データベース >  >> RDS >> Mysql

HQL / JPAは、日付範囲の間に利用可能なアイテムを検索します

    クエリは正しいと思います。

    ただし、車のIDに基づいて選択する場合は、条件として車のIDもクエリに追加する必要があります

    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
    

    または、あなたもそのようにすることができます

    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
    

    次に、:carId値が2に等しいことを渡す必要があります

    更新

    結果を動的にする必要がある場合は、このSQLクエリを試すことができます。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) 
    

    こちらがJPQLです あまりにも

    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. PostgreSQLのカーソルベースのレコード

    2. Phoenixを使用したEctoクエリでカテゴリ別に最大日付グループのIDを選択するにはどうすればよいですか?

    3. メールのimapphpを読む

    4. OracleのINSERT重複主キーの更新?