连接在选择查询中不起作用

时间:2015-02-26 07:59:48

标签: mysql concatenation

我们从数据库中提取订购产品的清单,包括加入订单表。

我们希望根据已通过的产品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,即使我们有相应的连接列的名称。

请任何人帮我弄清楚为什么这不起作用。我们在上面的查询中做错了吗?

提前致谢。

2 个答案:

答案 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