sql >> Database >  >> RDS >> Mysql

JPA-query in meerdere tabellen met veel-op-veel-relatie

Ik denk dat je vraag misschien verkeerd is, wat de oorzaak van het probleem kan zijn.

Je gebruikt momenteel:

 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

Het probleem kan zijn dat Medical_Service geen veld Hospital_id bevat (gebruikt in de JOIN).

Als u graag native queries gebruikt, kunt u dit doen:

 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')

De binnenste SELECT krijgt alle Hospital_id's voor ziekenhuizen die een spoeddienst aanbieden. De buitenste select selecteert vervolgens alle ziekenhuizen waar de Hospital_id in de binnenste SELECT staat (d.w.z. ze bieden een Emergency service), maar ook alleen die met een postcode van 3000.

Om een ​​native query te gebruiken, zou je zoiets als dit doen:

    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. Java SQL-datum is 1 dag verschoven

  2. Beste benaderingen voor gegroepeerde mediaan

  3. Perfecte manier om MySQL-gegevens bij te werken/op te slaan zonder vertraging en fouten bij het bijwerken van statistieken

  4. Hoe voeg je een <br/> toe na elk resultaat, maar niet het laatste resultaat?