mysql - else 语句在 mysql 中不起作用

标签 mysql

大家好,我有一张包含产品和价格的表格。我想做的就是显示每种产品的最低价格,如果价格表中不存在,则显示价格为空的产品这是我编写的查询

SELECT 
t15_catalogue_line.T15_GROUP, sc_products.product_code,sc_products.unic, 
sc_products.name_ru, UPPER(TRIM(sc_products.brief_description_ru)) AS 
brief_description_ru, sc_products.suupplier, price.Price, 
sc_group_discounts.`action`, sc_group_discounts.procent,
sc_products.productID, price.in_stock, price.supplier, t10_item.T10_ITEM, 
t10_item.unic, t10_item.T10_DESC, t10_item.T10_IMG, t10_item.T10_ITEM_GROUP, 
t10_item.T10_FIELD1, t10_item.T10_FIELD2, t10_item.T10_FIELD3, 
t10_item.T10_FIELD4, t10_item.T10_FIELD5, t10_item.T10_FIELD6, 
t10_item.T10_FIELD7, t10_item.T10_FIELD8, t10_item.T10_FIELD9, 
t10_item.T10_FIELD10, t10_item.T10_FIELD11, t14_item_fields.T14_ITEM_GROUP, 
t14_item_fields.T14_FIELD, t14_item_fields.T14_NAME, 
t14_item_fields.T14_UNIT, t14_item_fields.T14_SEARCH 
FROM sc_products 
LEFT OUTER JOIN t15_catalogue_line ON (sc_products.unic = t15_catalogue_line.unic) 
LEFT OUTER JOIN price ON (sc_products.product_code = price.item) AND (sc_products.suupplier = price.postavchik)
LEFT OUTER JOIN sc_group_discounts ON (sc_products.item_group = sc_group_discounts.item_group)
LEFT OUTER JOIN t10_item ON (sc_products.unic = t10_item.unic and sc_products.CatText=t10_item.CatText)
LEFT OUTER JOIN t14_item_fields ON (t10_item.T10_ITEM_GROUP = t14_item_fields.T14_ITEM_GROUP) 
WHERE sc_products.CatText = 'bearing' 
AND t15_catalogue_line.T15_CARTYPE = '42769' 
AND t15_catalogue_line.T15_GROUP = '546678' and sc_products.unic is not null and sc_products. unic!='' and 
CASE WHEN price.Price is null then price.Price is null else price.Price=(SELECT 
MIN(price.Price) from price where price.unic=sc_products.unic 
AND price.CatText='bearing') end 
GROUP BY sc_products.unic 
ORDER by isnull (price.Price),price.Price ASC

现在它只显示那些价格为空的其他语句不起作用。

最佳答案

另一个答案很接近...您可能需要通过额外的 LEFT-JOIN 到您的 ELSE 子选择来完成此操作...

左连接 ( 选择 价格.unic, MIN(价格.价格) 作为最低价格 从 价格 在哪里 Price.CatText = '轴承' 通过...分组 价格.unic ) ByUnic ON sc_products.unic = ByUnic.unic

然后将其删除,而不是您的 case/when WHERE 子句。更改字段选择属性,将价格从...price.price 更改为:

  COALESCE( price.Price, ByUnic.minPrice ) as Price

这将首先返回price.price字段。如果为 null,则返回左连接表 ByUnic 中的值,如果存在则返回 minPrice 结果,否则仍保持为 null。如果您希望最低价格在 Price.Price 之前,只需交换字段顺序,例如

  COALESCE( ByUnic.minPrice, price.Price ) as Price

关于mysql - else 语句在 mysql 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38121293/

相关文章:

Android:将 mysql(XAMPP) 连接到模拟器上的 android 应用程序

c# - C#中从PK到FK插入数据

mysql - 在表之间的连接期间,MySQL 是否自动使用 coalesce 函数?

来自带有 IN 子句的两个表的 mysql 查询请求

mysql - 如何获得只显示 MySQL 中当前或 future 项目的查询?

mysql - SQL 内连接会创建重复项 - 为什么?

php - 使用 PHP+MYSQL+JSON+FBGRAPH 为随机元素传递错误数据

mysql 查询,使用结果作为变量

mysql - 如何在MYSQL中定义触发器以防止某些值插入到表中?

mysql - 在单个查询中更新具有不同值的多行 - MySQL