GROUP BY不在左连接查询中工作

时间:2015-07-23 10:19:45

标签: sql join

我试图在左连接sql查询中使用group by子句,但它无法正常工作。 请提前帮助我。

SELECT Cust_Mst_Det.Cust_Hd_Code,
       Cust_Mst_Det.First_Name,
       SL_HEAD20152016.vouch_date AS invoice_2,
       SL_HEAD20142015.vouch_date AS invoice_1,
       Cust_Mst_Hd.EMail
FROM Cust_Mst_Det
LEFT JOIN SL_HEAD20142015 ON Cust_Mst_Det.Cust_Hd_Code=SL_HEAD20142015.Member_Code
LEFT JOIN SL_HEAD20152016 ON Cust_Mst_Det.Cust_Hd_Code=SL_HEAD20152016.Member_Code
LEFT JOIN Cust_Mst_Hd ON Cust_Mst_Det.Cust_Hd_Code=Cust_Mst_Hd.Cust_Hd_Code
WHERE cust_mst_det.first_name!='NIL'
GROUP BY Cust_Mst_Det.Cust_Hd_Code
ORDER BY SL_HEAD20152016.vouch_date DESC,
         SL_HEAD20142015.vouch_date

2 个答案:

答案 0 :(得分:0)

似乎无法在GROUP BY汇总中使用ORDER BY。我的基本逻辑是有缺陷的。我需要运行以下子查询。

前:

SELECT p.*, pp.price 
FROM products p 
LEFT JOIN ( SELECT price FROM product_price ORDER BY date_updated DESC ) pp 
ON p.product_id = pp.product_id GROUP BY p.product_id;

这会影响性能,但因为每行都有相同的子查询,所以它不应该太糟糕。

答案 1 :(得分:0)

我不确定您使用的是哪个DBMS,但在Oracle上,您的查询根本不起作用。

  • 第一个问题:GROUP BY语句与聚合函数结合使用,以按一列或多列对结果集进行分组。 SELECT语句中没有任何聚合函数(count,max等)
  • 第二个问题:您必须在GROUP BY语句中指定SELECT语句中的所有列(不包括表示聚合结果的列)。

正如我所说,我不知道你使用的是哪个数据库,但这两点应该适用于大多数SQL标准。