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

Połącz jako podzapytanie MySQL

SELECT  Parts.id
FROM    (
        SELECT  parts_id
        FROM    Parts_Category
        WHERE   Parts_Category.category_id = '508'
        UNION
        SELECT  parts_id
        FROM    Parts_Category
        WHERE   Parts_Category.main_category_id = '508'
        ) pc
JOIN    Parts
ON      parts.id = pc.parts_id
        AND Parts.status = 'A'
LEFT JOIN
        Image
ON      image.id = parts.image_id

Zauważ, że MySQL może użyć Index Merge i możesz przepisać swoje zapytanie w ten sposób:

SELECT  Parts.id
FROM    (
        SELECT  DISTINCT parts_id
        FROM    Parts_Category
        WHERE   Parts_Category.category_id = '508'
                OR Parts_Category.main_category_id = '508'
        ) pc
JOIN    Parts
ON      parts.id = pc.parts_id
        AND Parts.status = 'A'
LEFT JOIN
        Image
ON      image.id = parts.image_id

, co będzie bardziej wydajne, jeśli masz następujące indeksy:

Parts_Category (category_id, parts_id)
Parts_Category (main_category_id, parts_id)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najlepsza technika buforowania wyników z zapytań, które rzadko się zmieniają

  2. Identyfikator zasobu nr 10, gdy chcę wyświetlić zmienną za pomocą php i mysql

  3. Jak mogę pominąć kolumnę z instrukcji SELECT podczas używania jej w klauzuli HAVING?

  4. zapytanie mysql, aby uzyskać urodziny przez następne 10 dni

  5. serwer php mysql zniknął