我的查询有两个问题:在分组前显示空值和排序依据

时间:2013-07-17 08:03:38

标签: sql group-by left-join sql-order-by

我的查询存在重大问题。我想在源表中显示所有结果,即使右表中没有定价条目。

我的订单也不起作用。我想在分组之前按product_pricing.PP_CashPrice订购。

这是我的SQL代码:

SELECT * FROM source 
LEFT JOIN product_pricing ON source.Source_ID = product_pricing.Source_ID 
WHERE (product_pricing.Product_ID = '234' 
       OR product_pricing.PP_ID = NULL) 
AND source.Source_Active = 'Yes' 
GROUP by source.Source_ID 
ORDER by PP_CashPrice desc

我基本上需要它来显示所有来源。右栏将有重复,但我只需要显示最高的一列。

我的右栏如下:

CREATE TABLE product_pricing ( PP_ID int(10) NOT NULL AUTO_INCREMENT, PP_Type varchar(150) NOT NULL, PP_CashPrice decimal(10,2) NOT NULL, PP_DateObtained date NOT NULL, PP_TimeObtained time NOT NULL, PP_Active varchar(3) NOT NULL, PP_Postcode varchar(150) NOT NULL, Source_ID int(10) NOT NULL, SC_ID int(10) NOT NULL, Product_ID int(10) NOT NULL, PRIMARY KEY (PP_ID) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

1 个答案:

答案 0 :(得分:2)

您不应在“Left joined”表上使用where子句。将条件放在where子句

我还会使用COALESCE运算符作为排序子句,如果你想要不同的sourceId和“内部定价”排序,可能会在s.Source_ID上添加一个排序。

SELECT * FROM source  s
LEFT JOIN product_pricing pp ON s.Source_ID = pp.Source_ID AND pp.PP_ID = '234'
AND s.Source_Active = 'Yes' 
GROUP by s.Source_ID 
ORDER by s.Source_ID, COALESCE(p.PP_CashPrice, 0) desc