sql >> Databáze >  >> RDS >> Mysql

Dotaz JPA ve více tabulkách se vztahem many-to-many

Myslím, že váš dotaz může být chybný, což může být příčinou problému.

Aktuálně používáte:

 SELECT h FROM Hospital h
     INNER JOIN Medical_Service m ON h.hospital_id = m.hospital_id
     WHERE h.Postcode = :postcode AND m.Medical_name = :medical

Problém může být v tom, že Medical_Service neobsahuje pole Hospital_id (použité v JOIN).

Pokud rádi používáte nativní dotazy, můžete to udělat takto:

 SELECT * FROM Hospital WHERE Postcode = 3000 AND Hospital_id IN
    (SELECT Hospital_id FROM Hospital_Medical hm INNER JOIN Medical_Service m ON hm.Medical_id = m.Medical_id
    where Medical_name = 'Emergency')

Vnitřní SELECT získá všechna Hospital_id pro nemocnice, které nabízejí pohotovostní službu. Vnější výběr pak vybere všechny nemocnice, kde je Hospital_id ve vnitřním SELECTu (tj. nabízejí pohotovostní službu), ale také pouze ty s poštovním směrovacím číslem 3000.

Chcete-li použít nativní dotaz, udělali byste něco takového:

    int postcode = 3000;
    String service = "Emergency";

    StringBuilder sb = new StringBuilder(); 
        sb.append("SELECT * FROM Hospital WHERE Postcode = ");
        sb.append(postcode);
        sb.append("AND Hospital_id IN SELECT Hospital_id FROM Hospital_Medical hm INNER JOIN "
                + "Medical_Service m ON hm.Medical_id = m.Medical_id where Medical_name = '");
        sb.append(service);
        sb.append("')");

    String queryString = sb.toString();
    Query query = em.createNativeQuery(queryString);
    List<Hospital> result = query.getResultList();



  1. Jak vytvořím parametrizovaný příkaz PDO v PHP pro dynamický dotaz?

  2. Používáte databázi mysql k ověřování uživatelů v zabezpečení Spring?

  3. Jak jsou data uložena v Oracle?

  4. Deklarujte proměnnou v databázi MySQL „pouze pro čtení“.