且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

联合作为子查询MySQL

更新时间:2023-02-26 09:46:41

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,并且您可以这样重写查询:

Note that MySQL can use Index Merge and you can rewrite your query as this:

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

,如果您具有以下索引,则效率会更高:

, which will be more efficient if you have the following indexes:

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