Mysql
 sql >> база данни >  >> RDS >> Mysql

Един към много SQL SELECT в един ред

Това е един от начините да получите резултат.

Този подход използва корелирани подзаявки. Всяка подзаявка използва ORDER BY клауза за сортиране на свързаните редове от таблица 2 и използва LIMIT клауза за извличане на 1-ви, 2-ри и 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  

ПОСЛЕДВАНЕ

@gliese581g посочва, че може да има проблеми с производителността при този подход, с голям брой редове, върнати от външната заявка, тъй като всяка подзаявка в списъка SELECT се изпълнява за всеки ред, върнат във външната заявка.

От само себе си се разбира, че този подход изисква индекс:

ON table2 (PKID_FROM_TABLE_1, U_DATA)

-или най-малкото-

ON table2 (PKID_FROM_TABLE_1)

Вероятно последният индекс вече съществува, ако има дефиниран външен ключ. Предишният индекс би позволил заявката да бъде удовлетворена изцяло от индексните страници („Използване на индекс“), без да е необходима операция за сортиране („Използване на сортиране на файлове“).

@glies581g е съвсем прав да посочи, че изпълнението на този подход може да бъде проблематично при "големи" набори.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Мониторинг на база данни - Отстраняване на неизправности в Prometheus с табла за управление на SCUMM

  2. Избягване на вложени заявки

  3. Търсите просто пълнотекстово търсене? Опитайте MySQL InnoDB + CakePHP с Word Stemming

  4. Как да направите изместването на ограничението динамично, като използвате само (My)SQL

  5. Как да покажа дата като iso 8601 формат с PHP