我们从数据库中提取订购产品的清单,包括加入订单表。
我们希望根据已通过的产品ID列出所有订单中每个订单中订购的产品数量。我们还想显示下订单的客户名称。因此,根据我们的知识,我们创建了一个查询来获取项目:
SELECT
`main_table`.*,
`order`.*,
SUM(main_table.qty_ordered - main_table.qty_canceled) AS `custom_qty`,
SUM(main_table.row_total) AS `custom_row_total`,
SUM(main_table.tax_amount) AS `tax_amount`,
SUM(main_table.hidden_tax_amount) AS `hidden_tax_amount`,
SUM(main_table.discount_amount) AS `discount_amount`,
CONCAT(order.customer_firstname, ' ' ,order.customer_middlename, ' ', order.customer_lastname) AS full_name
FROM `sales_flat_order_item` AS `main_table`
INNER JOIN `sales_flat_order` AS `order` ON main_table.order_id=order.entity_id
WHERE (((((main_table.product_id = '902') OR (main_table.product_id = '903') OR (main_table.product_id = '904'))))) AND (main_table.store_id = '1') AND (CONCAT(order.customer_firstname, order.customer_middlename, order.customer_lastname) like '%rag%')
GROUP BY `main_table`.`sku`
除了concat()之外,上面查询中使用的所有聚合函数都能正常工作。每次我们将full_name列的值作为NULL,即使我们有相应的连接列的名称。
请任何人帮我弄清楚为什么这不起作用。我们在上面的查询中做错了吗?
提前致谢。
答案 0 :(得分:1)
如果任何参数为CONCAT()
,则NULL
返回NULL
我猜测这三个参数中的一个可能是NULL
?
尝试使用CONCAT_WS()
函数(无论如何使用分隔符),它会跳过空值。
CONCAT_WS(' ', order.customer_firstname, order.customer_middlename, order.customer_lastname) AS full_name
有关详细信息,请参阅the documentation。
旁注:您可能希望了解如何使用表别名来缩短查询文本并使其更具可读性。
答案 1 :(得分:0)
您确定每列都有值吗? (中间名?)
MYSQL手册说:
SELECT CONCAT('My',NULL,'QL') - > NULL