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

Обединяване като подзаявка 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

Имайте предвид, че MySQL може да използва Index Merge и можете да пренапишете заявката си така:

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

, което ще бъде по-ефективно, ако имате следните индекси:

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. INSERT ... НА ДУБЛИКАТ КЛЮЧ (не правете нищо)

  2. MYSQL - Вътрешно присъединяване с AFTER UPDATE в таблицата

  3. Вложени връзки със Sequelize

  4. MySQL тригерът за задаване на колона на max + 1 не работи

  5. SQL уникален въпрос за чувствителност на главни и малки букви