2015-07-23 2 views
-6

Я пытаюсь использовать предложение group by в левом соединении 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 
+4

«... и не работает» -> Пожалуйста, напишите лучшее объяснение! Что не работает? Вы получили сообщение об ошибке? Получаете ли вы неожиданные результаты? Какие результаты вы получаете? Какие результаты вы ожидаете? И: Какие СУБД вы используете? –

ответ

0

Похоже, что невозможно использовать ORDER BY для обобщения GROUP 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; 

Это займет удар по производительности, но, как это тот же подзапрос для каждой строки не должно быть слишком плохо.

0

Я не уверен, какие СУБД вы используете, но в Oracle ваш запрос не будет работать вообще.

  • Первая проблема: оператор GROUP BY используется вместе с совокупными функциями для группировки результирующего набора одним или несколькими столбцами. У вас нет какой-либо агрегирующей функции в операторе SELECT (кол-во, макс и т. Д.).
  • Вторая проблема: вы должны указать все столбцы из инструкции SELECT в своем операторе GROUP BY (исключая столбцы, представляющие результаты агрегации).

Как я уже сказал, я не знаю, какая БД используется вами, но эти две точки должны применяться для большинства стандартов SQL.

Смежные вопросы