如果联接之一上没有值,则mysql返回null

时间:2020-01-31 16:14:20

标签: mysql

我有一个带有联接的sql查询,如果没有返回结果而不是不返回任何结果,我想为“ aov.value gazlabel”显示NULL,我尝试了在左JOIN eav_attribute_option_value上进行外部联接,但是不返回任何东西。

查询:

SELECT pev.`entity_id`,
       pev.`value`,
       aov.`value` gazlabel
FROM `catalog_product_entity_varchar` AS pev
INNER JOIN `catalog_product_entity` AS pe
    ON pe.`entity_id` = pev.`entity_id`
INNER JOIN `catalog_product_entity_int` AS pei
    ON pei.`entity_id` = pe.`entity_id`
        AND pei.`store_id` = pev.`store_id`
left JOIN `eav_attribute_option_value` AS aov
    ON aov.`option_id` = pei.`value`
        AND aov.`store_id` = pev.`store_id`
INNER JOIN `eav_attribute` as ea
    ON ea.`attribute_id` = pei.`attribute_id`
WHERE pev.`attribute_id` = 71
    AND pev.`store_id` IN ("0", "1")
    AND ea.`attribute_code` = "front_label"
    AND pe.`sku` LIKE "C10192"
ORDER BY `pev`.`store_id` DESC
LIMIT 1

1 个答案:

答案 0 :(得分:1)

可能是某些表的匹配失败,而不是aov,因此请使用更多的左联接

    SELECT pev.`entity_id`,
           pev.`value`,
           aov.`value` gazlabel
    FROM `catalog_product_entity_varchar` AS pev
    LEFT JOIN `catalog_product_entity` AS pe
        ON pe.`entity_id` = pev.`entity_id`
           AND pe.`sku` LIKE "C10192"
    LEFT JOIN `catalog_product_entity_int` AS pei
        ON pei.`entity_id` = pe.`entity_id`
            AND pei.`store_id` = pev.`store_id`
    left JOIN `eav_attribute_option_value` AS aov
        ON aov.`option_id` = pei.`value`
            AND aov.`store_id` = pev.`store_id`
    LEFT JOIN `eav_attribute` as ea
        ON ea.`attribute_id` = pei.`attribute_id`
          AND ea.`attribute_code` = "front_label"
    WHERE pev.`attribute_id` = 71
        AND pev.`store_id` IN ("0", "1")
    ORDER BY `pev`.`store_id` DESC
    LIMIT 1

,或者如果仅满足条件,则仅在第一个不匹配的表上减少左联接

    SELECT pev.`entity_id`,
           pev.`value`,
           aov.`value` gazlabel
    FROM `catalog_product_entity_varchar` AS pev
    INNER JOIN `catalog_product_entity_int` AS pei
        ON pei.`entity_id` = pe.`entity_id`
            AND pei.`store_id` = pev.`store_id`
    INNER JOIN `eav_attribute` as ea
        ON ea.`attribute_id` = pei.`attribute_id`
          AND ea.`attribute_code` = "front_label"
    LEFT JOIN `catalog_product_entity` AS pe
        ON pe.`entity_id` = pev.`entity_id`
           AND pe.`sku` LIKE "C10192"
    left JOIN `eav_attribute_option_value` AS aov
        ON aov.`option_id` = pei.`value`
            AND aov.`store_id` = pev.`store_id`
    WHERE pev.`attribute_id` = 71
        AND pev.`store_id` IN ("0", "1")
    ORDER BY `pev`.`store_id` DESC
    LIMIT 1