Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Optymalizacja MYSQL LEFT JOIN z CASE

Użycie instrukcji case nie przyspieszy zapytania w twoim przypadku, ale skoro o to prosiłeś, poniżej przedstawiam, jak by to wyglądało.

SELECT a.folderid, a.foldername, a.contenttype, 
    (CASE a.contenttype
        WHEN 'file' THEN b.descriptor
        WHEN 'link' THEN c.descriptor
        WHEN 'extfile' THEN d.descriptor
        WHEN 'video' THEN e.descriptor
        ELSE f.descriptor
    END CASE) AS descriptor
FROM t_folders a
LEFT JOIN t_files b ON a.contenttype = 'file' AND a.contentid = b.fileid
LEFT JOIN t_links c ON a.contenttype = 'link' AND a.contentid = c.linkid
LEFT JOIN t_extfiles d ON a.contenttype = 'extfile' AND a.contentid = d.extfileid
LEFT JOIN t_videos e ON a.contenttype = 'video' AND a.contentid = e.videoid
LEFT JOIN t_exams f ON a.contenttype = 'exam' AND a.contentid = f.examid
WHERE a.folderid = $folderId
ORDER BY a.folderid DESC

Jeśli każda z tabel t_files, t_links itp. ma pole folder_id, spróbowałbym również wykonać UNION na tych tabelach, a następnie zostawił wynik z t_folders, aby uzyskać identyfikator folderu i nazwę folderu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Transfer MYSQL taki sam lub mniejszy niż saldo

  2. Utwórz nową aplikację Ruby on Rails, używając MySQL zamiast SQLite

  3. Wykryj, czy data jest w czasie letnim w MySql

  4. Nie można pobrać danych z tabeli MySQL, która pasuje do określonego uid

  5. Zapisywanie danych przestrzennych w CakePHP