2016-07-24 70 views
2

無變量自己對他們的計,我有3個表:收益產品ID和即使在MySQL

table_products - product_id, pname 
variants - vid, vname 
table_product_varients - product_id, vid 

我想要得到的產品計數的所有產品變型,如果沒有變型的產品也應該給計數爲0

這是我的查詢:

SELECT P.product_id, count(*) AS count 
FROM table_product_varients AS PV 
LEFT JOIN table_products AS P ON PV.product_id = P.product_id 
GROUP BY P.product_id 
ORDER BY P.product_id ASC 

但是,這是不是給產品其中有沒有變種。

任何人都可以幫助我嗎?

回答

3

您應該已將table_products表添加到left。 你也應該算作PV.product_id

SELECT 
P.product_id, 
count(PV.product_id) AS count 
FROM table_products AS P 
LEFT JOIN table_product_varients AS PV ON PV.product_id = P.product_id 
GROUP BY P.product_id 
ORDER BY P.product_id ASC; 

注:對於不具備相應的table_products_varients表項,您將得到PV.product_idNULL價值的產品。因此COUNT(NULL)實際上返回0

關於COUNT一些微妙之處:

SELECT COUNT(0); Result: 1 

SELECT COUNT(-1); Result: 1 

SELECT COUNT(NULL); Result: 0 

SELECT COUNT(71); Result: 1 

SQL FIDDLE

+0

我嘗試這個查詢。但仍然沒有返回沒有變種的行 –

+0

之後我做了一些小改動。你可以再試一次嗎?如果你得到的結果不是預期的那麼請分享一個sql小提琴。 – 1000111

+0

同樣的結果。 1-1,1-1,3-1,4-7,7-1 ......基本上我需要1-1,2-1,3-1,4-7,5-0,6-0,7 -1。 –