Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy vấn JPA trong nhiều bảng với mối quan hệ nhiều-nhiều

Tôi nghĩ rằng truy vấn của bạn có thể sai, đó có thể là nguyên nhân của sự cố.

Bạn hiện đang sử dụng:

 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

Vấn đề có thể là Medical_Service không chứa trường Hospital_id (được sử dụng trong JOIN).

Nếu bạn hài lòng khi sử dụng các truy vấn gốc, bạn có thể thực hiện điều này:

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

SELECT bên trong nhận tất cả Hospital_id's cho các bệnh viện cung cấp dịch vụ Cấp cứu. Lựa chọn bên ngoài sau đó sẽ chọn tất cả các bệnh viện có Hospital_id nằm trong SELECT bên trong (nghĩa là họ cung cấp dịch vụ Cấp cứu) nhưng cũng chỉ những bệnh viện có mã bưu điện là 3000.

Để sử dụng một truy vấn gốc, bạn sẽ làm như sau:

    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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi:chọn lệnh bị từ chối đối với người dùng '<userid>' @ '<ip-address>' cho bảng '<table-name>'

  2. MYSQL khác ở Đầu ra từ tập lệnh

  3. đối sánh tìm kiếm php (mờ)

  4. Cách tốt nhất để tìm nạp 4 hàng cuối cùng từ tập hợp kết quả bằng cách sử dụng mysql

  5. phòng truy vấn mysql còn trống