【问题标题】:MySql Select Statement IssueMySql Select 语句问题
【发布时间】:2015-09-17 12:48:41
【问题描述】:

我不确定我在这里尝试实现的目标是什么,这就是为什么我会尝试用图片来解释。

以下是我得到的查询:

SELECT DISTINCT
unspsc_commodity.`name` AS Commodity,
unspsc_code.`code` AS `Code`,
attributes.`value`
FROM
products
INNER JOIN unspsc_code ON products.unspsc_code_id =     unspsc_code.unspsc_code_id
INNER JOIN unspsc_commodity ON unspsc_code.unspsc_commodity_id =   unspsc_commodity.unspsc_commodity_id
INNER JOIN attributes ON products.product_id = attributes.product_id
WHERE attributes.`name` = 'Product Type'

以上查询仅选择 unspsc_commodity、unspsc_code 和属性名称为“产品类型”的值。我也想为没有产品类型的产品选择 unspsc_commodity、unspsc_code。因此,在属性表中没有产品类型的情况下,查询只需选择代码和商品,并输出 null 作为值。有没有可能实现。

【问题讨论】:

    标签: php mysql select


    【解决方案1】:

    将您的查询更改为如下所示的LEFT JOIN,并使用CASE 表达式在select 子句中移动WHERE 条件

    SELECT DISTINCT
    unspsc_commodity.`name` AS Commodity,
    unspsc_code.`code` AS `Code`,
    CASE WHEN IFNULL(attributes.`name`,'') = 'Product Type' THEN attributes.`value` ELSE NULL END AS Value
    FROM
    products
    INNER JOIN unspsc_code 
    ON products.unspsc_code_id = unspsc_code.unspsc_code_id
    INNER JOIN unspsc_commodity 
    ON unspsc_code.unspsc_commodity_id = unspsc_commodity.unspsc_commodity_id
    LEFT JOIN attributes 
    ON products.product_id = attributes.product_id;
    

    【讨论】:

    • 谢谢拉胡尔,它做了我需要的。你能告诉我我怎么能有另一个案例,因为我想选择attribute.name 具有产品类型和外形尺寸的数据
    • @user4676307,可以像一般语法case when condirtion then value when con2 then val2 else val3 end
    • 我得到了 case 语句,但是属性表还有另一个左关节吗?左连接属性 AS attributes_2 ON products.product_id = attributes_2.product_id
    • CASE WHEN attributes_2.name = 'Form Factor' THEN attributes_2.value ELSE NULL END AS Value
    • @user4676307,不,不,只需在我的答案中使用 IN 运算符,例如 CASE WHEN IFNULL(attributes.name,'') IN ('Product Type' ,'From actor')
    【解决方案2】:

    试试:

    SELECT DISTINCT
    unspsc_commodity.`name` AS Commodity,
    unspsc_code.`code` AS `Code`,
    attributes.`value`
    FROM
    products
    INNER JOIN unspsc_code ON products.unspsc_code_id =     unspsc_code.unspsc_code_id
    INNER JOIN unspsc_commodity ON unspsc_code.unspsc_commodity_id =   unspsc_commodity.unspsc_commodity_id
    INNER JOIN attributes ON products.product_id = attributes.product_id
    WHERE 1
    

    【讨论】:

    • 我无法从 where 语句中删除 "attributes.name = 'Product Type'" 作为属性表有很多其他名称,我只需要选择其中的 attribute.name 是产品类型
    猜你喜欢
    • 2023-04-11
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 2010-12-15
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多