Mysql:在where子句中使用join table列值

时间:2018-04-24 14:13:48

标签: mysql sql

catalog_product_entity

enter image description here

catalog_product_relation

enter image description here

catalog_product_entity_varchar

enter image description here

我想从上表中导出sku和url:

  • sku位于catalog_product_entity表格中。
  • url位于catalog_product_relation表中。

我尝试连接这三个表,如果catalog_product_entity表entity_id与child_id中的catalog_product_relation列匹配,则选择url值,然后在where子句中使用parent_id,使用entity_id;

select  cpe.sku
,       value 
from    catalog_product_entity as cpe
left join 
        catalog_product_entity_varchar as cpev
on      cpe.entity_id = cpev.entity_id
where   cpev.attribute_id = 119 and 
        type_id = "simple" and 
        cpev.store_id=0 and 
        cpev.entity_id = 
        (
        select  parent_id
        from    catalog_product_relation 
        where   child_id = cpe.entity_id
        )

以上查询不是我在此处上传的正确查询以供理解

修改

catalog_product_entity_varchar taables标题

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以join两次,一次直接,一次通过中间父子表。当找不到父值时,使用coalesce回退到子值:

select  cpe.sku
,       coalesce(parent_cpev.value, child_cpev.value)
from    catalog_product_entity as cpe
left join 
        catalog_product_entity_varchar as child_cpev
on      child_cpev.entity_id = cpe.entity_id
        and child_cpev.attribute_id = 119
        and child_cpev.store_id = 0
left join
        catalog_product_relation as cpr
on      cpe.entity_id = cpr.child_id
left join 
        catalog_product_entity_varchar as parent_cpev
on      parent_cpev.entity_id = cpr.parent_id
        and parent_cpev.attribute_id = 119
        and parent_cpev.store_id = 0
where   cpe.type_id = 'simple'

答案 1 :(得分:0)

type_id列没有在您的查询中指定的(缺少的)表别名前缀。