以下请求为我提供了产品清单,销售产品的商店以及"父母"商店,我需要用于其他目的:
SELECT `allproducts`.`id_store` , `uniques` . *
FROM `uniques`
INNER JOIN `allproducts` ON `allproducts`.`SKU` = `uniques`.`SKU`
结果如下:
id_store SKU id_parent name sale_sdate sale_edate
1085 100768 1088 productA 5/18/2014 6/14/2014
1088 100768 1088 productA 5/18/2014 6/14/2014
1089 100768 1088 productA 5/18/2014 6/14/2014
你可以看到,在第二行,id_store和id_parent是相同的(父商店也销售产品)。在这种情况下,我应该用0替换id_parent:
id_store SKU id_parent name sale_sdate sale_edate
1085 100768 1088 productA 5/18/2014 6/14/2014
1088 100768 0 productA 5/18/2014 6/14/2014
1089 100768 1088 productA 5/18/2014 6/14/2014
我很难在这个大请求中集成IF条件(我可以在这里发布我尝试的所有内容但它可能会让事情变得非常混乱)。有人可以帮忙吗?
答案 0 :(得分:4)
使用CASE
。如果没有其他条件,请删除WHERE
子句。
SELECT `allproducts`.`id_store`, `uniques`.SKU,
CASE WHEN `allproducts`.`id_store`=`uniques`.`id_parent` THEN 0 ELSE `uniques`.`id_parent` END as id_parent,
`uniques`.`name`,`uniques`.`sale_sdate`,`uniques`.`sale_edate`
FROM `uniques`
INNER JOIN `allproducts` ON `allproducts`.`SKU` = `uniques`.`SKU`
<强>解释强>
如果id_store
等于id_parent
,则会选择0.否则,它会选择id_parent
本身。
修改强>
我想用别名重写您的查询以提高可读性。
SELECT ap.`id_store`, u.SKU,
CASE WHEN ap.`id_store`=u.`id_parent` THEN 0 ELSE u.`id_parent` END as id_parent,
u.`name`,u.`sale_sdate`,u.`sale_edate`
FROM `uniques` u
INNER JOIN `allproducts` ap ON ap.`SKU` = u.`SKU`
答案 1 :(得分:1)
像这样使用if
:
SELECT a.`id_store`, a.`SKU`,
IF (a.`id_store` = u.`id_store`, 0, u.id_store`) as `id_parent`,
u.`name`, u.`sale_sdate`, `u.sale_edate`
FROM `uniques` u
INNER JOIN `allproducts` a ON u.`SKU` = a.`SKU`
由于您在WHERE
子句中指定了要加入的字段,因此可以删除INNER JOIN
子句。