sql >> Database teknologi >  >> RDS >> Mysql

Skriv native sql-forespørgsel med venstre join og paginering i dvale (springboot)

Jeg løste det...

Forespørgslen skal se sådan ud:

@Query(
        value = "SELECT * FROM \n" +
                "(institution INNER JOIN user ON institution.user_id = user.id) \n" +
                "LEFT JOIN \n" +
                "(SELECT * FROM \n" +
                "building_institutions \n" +
                "WHERE building_id = :userId)\n" +
                " AS reserved_institutions \n" +
                "ON reserved_institutions.institutions_user_id = kits_nwt.institution.user_id \n" +
                " where reserved_institutions.institutions_user_id IS null \n"
                + "ORDER BY ?#{#pageable}"
        ,
        countQuery = "SELECT count(*) FROM \n" +
                "(institution INNER JOIN user ON institution.user_id = user.id) \n" +
                "LEFT JOIN \n" +
                "(SELECT * FROM \n" +
                "building_institutions \n" +
                "WHERE building_id =:userId)\n" +
                " AS reserved_institutions \n" +
                "ON reserved_institutions.institutions_user_id = kits_nwt.institution.user_id \n" +
                "where reserved_institutions.institutions_user_id IS null \n" +
                "ORDER BY ?#{#pageable}",
        nativeQuery = true)
Page<Institution> findPotentialInstitutionsByBuildingId(@Param("userId") Long userId, Pageable pageable);

Jeg fik fejlen på linje 4 nær WHERE, da min forespørgsel så sådan ud:

@Query(
        value = "SELECT username, password, description, location, title, user_id FROM (institution INNER JOIN user ON institution.user_id = user.id) LEFT JOIN\n" +
                "(SELECT * FROM building_institutions WHERE building_institutions.building_id = 1) AS reserved_institutions\n" +
                "ON reserved_institutions.institutions_user_id = kits_nwt.institution.user_id\n" +
                "WHERE reserved_institutions.institutions_user_id IS null ORDER BY ?#{#pageable}",
        nativeQuery = true)
Page<Institution> findPotentialInstitutionsByBuildingId(Long userId, Pageable pageable);

og det var fordi jeg ikke tilføjede countQuery parameter til @Query anmærkning.

Stor tak til alle jer, der forsøgte at hjælpe.

Jeg håber, at jeg sparer en anden for mange timers elendighed.

Skål! :)




  1. Loop på borde med PL/pgSQL i Postgres 9.0+

  2. Hvordan bytter man værdier af to rækker i MySQL uden at overtræde unikke begrænsninger?

  3. Eksporter tabeldata fra en SQL Server til en anden

  4. lagring af data i en database ved hjælp af rediger tekst og knap