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

CHỌN SQL một-nhiều thành một hàng

Đây là một cách để có được kết quả.

Cách tiếp cận này sử dụng các truy vấn con tương quan. Mỗi truy vấn con sử dụng ORDER BY mệnh đề để sắp xếp các hàng có liên quan từ table2 và sử dụng LIMIT mệnh đề để truy xuất các hàng 1, 2 và 3.

SELECT a.PKID
     , a.DATA
     , (SELECT b1.U_DATA FROM table2 b1
         WHERE b1.PKID_FROM_TABLE_1 = a.PKID 
         ORDER BY b1.U_DATA LIMIT 0,1
       ) AS U_DATA1
     , (SELECT b2.U_DATA FROM table2 b2
         WHERE b2.PKID_FROM_TABLE_1 = a.PKID 
         ORDER BY b2.U_DATA LIMIT 1,1
       ) AS U_DATA2
     , (SELECT b3.U_DATA FROM table2 b3
         WHERE b3.PKID_FROM_TABLE_1 = a.PKID 
         ORDER BY b3.U_DATA LIMIT 2,1
       ) AS U_DATA3
  FROM table1 a
 ORDER BY a.PKID  

THEO DÕI

@ gliese581g chỉ ra rằng có thể có vấn đề về hiệu suất với cách tiếp cận này, với một số lượng lớn các hàng được trả về bởi truy vấn bên ngoài, vì mỗi truy vấn con trong danh sách CHỌN được thực thi cho mỗi hàng được trả về trong truy vấn bên ngoài.

Không cần phải nói rằng cách tiếp cận này đòi hỏi một chỉ mục:

ON table2 (PKID_FROM_TABLE_1, U_DATA)

-hoặc, ở mức tối thiểu-

ON table2 (PKID_FROM_TABLE_1)

Có thể chỉ mục thứ hai đã tồn tại, nếu có một khóa ngoại được xác định. Chỉ mục trước đây sẽ cho phép hoàn toàn đáp ứng truy vấn từ các trang chỉ mục ("Sử dụng chỉ mục") mà không cần thao tác sắp xếp ("Sử dụng tệp tin").

@ glies581g khá đúng khi chỉ ra rằng hiệu suất của phương pháp này có thể có vấn đề trên các tập hợp "lớn".



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi có thể tải xuống jar mysql jdbc từ đâu?

  2. Truy vấn MySQL để đếm các tên miền duy nhất từ ​​trường Địa chỉ email

  3. Hợp nhất 2 mảng và tính tổng các giá trị (Phím số)

  4. Bảng với 80 triệu bản ghi và thêm một chỉ mục mất hơn 18 giờ (hoặc mãi mãi)! Giờ thì sao?

  5. Sử dụng SQL JOIN và COUNT