0

クエリに大きな問題があります。右側のテーブルに価格エントリがない場合でも、ソース テーブルにすべての結果を表示したいと考えています。

私の注文も機能していません。グループ化する前に、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; 
4

1 に答える 1

2

「左結合」テーブルでは 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
于 2013-07-17T08:08:14.730 に答える