2017-01-10 2 views
0

Задача: 3 таблицы: tbl_product, tbl_soldproducts, tbl_purchasedetail В tbl_product есть первичный ключ prod_no, который является внешним ключом для каждой из двух таблиц. tbl_products tbl_products tbl_purchasedetail tbl_purchasedetail tbl_soldproducts tbl_soldproductsдобавление каждого значения строки из другой таблицы

В tbl_soldproducts У меня есть столбец item_sold описать, как много товаров, продаваемых для этого продукта за одну транзакцию. В tbl_purchasedetail у меня есть qty_purchase, которые описывают как количество покупки товара за транзакцию. Мне нужно посчитать общий предмет, который продается и покупается на продукт. Ex выход:

Prod no | item_sold |qty_purchase | left 
    1 | 23  |  25  | 2 
    2 | 1  |  10  | 9 

Мой текущий код, который отображать неверный вывод:

SELECT TP.prod_no,TP.barcode,TP.prod_name, COUNT(TS.qty) as num_sold, 
    COUNT(TPS.qty_delivered) as num_delivered 
    FROM tbl_product AS TP 
    LEFT JOIN tbl_soldproducts AS TS 
    on (TS.prod_no = TP.prod_no) 
    LEFT JOIN tbl_purchasedetail AS TPS 
    on (TPS.prod_no = TP.prod_no) 
    group by TS.prod_no 
    ORDER BY TP.prod_name 

ответ

1

Вы никогда не показывал нам данные примера, но я думаю, вы должны быть агрегирование два вспомогательных таблиц в отдельных подзапросов, и затем присоединяя эти результаты к tbl_product. Нечто подобное должно работать:

SELECT TP.prod_no, 
     TP.barcode, 
     TP.prod_name, 
     COALESCE(TS.num_sold, 0) AS num_sold, 
     COALESCE(TPS.num_delivered, 0) AS num_delivered 
FROM tbl_product TP 
LEFT JOIN 
(
    SELECT prod_no, COUNT(*) AS num_sold 
    FROM tbl_soldproducts 
    GROUP BY prod_no 
) TS 
    ON TP.prod_no = TS.prod_no 
LEFT JOIN 
(
    SELECT prod_no, COUNT(*) AS num_delivered 
    FROM tbl_purchasedetail 
    GROUP BY prod_no 
) TPS 
    ON TP.prod_no = TPS.prod_no 
ORDER BY TP.prod_name 

Ваш исходный запрос может быть хорошо, если все, что вы хотели, чтобы выбрать из tbl_product был номер продукта. Но ваш запрос может иметь странное поведение, как есть, потому что вы выбираете неагрегатные столбцы из tbl_product при использовании GROUP BY. Вы должны пойти с таким подходом, как я предложил вместо этого, если вы хотите также выбрать другие столбцы.

+0

Спасибо. Я запустил его, изменив COUNT на SUM. Теперь он добавляет все количество проданных и количество покупки. – propaganja

0

Вам лучше предоставить нам базу данных. @Tim Biegeleisen Это правильно

+0

Привет Цзян, вы должны оставить это в качестве комментария, и если вы не можете, то можете получить еще несколько реп, чтобы вы могли прокомментировать. –

+0

Извините, у меня недостаточно репутации для добавления комментариев, я просто использовал его в ближайшее время – Jiang

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