正确的选择语句

时间:2017-10-24 09:13:54

标签: mysql phpmyadmin

我有一个名为ps_product_supplier的表:

enter image description here

我想选择所有产品product_supplier_reference发生多次的产品,如果它出现在主要产品(id_product_attribute = 0)和组合上。

我试过这个选择,但我没有得到任何结果:

SELECT `id_product_supplier`, `id_product`, `id_product_attribute`,
    `product_supplier_reference`, COUNT(`product_supplier_reference`)
FROM `ps_product_supplier`
GROUP BY `id_product`
HAVING COUNT(`product_supplier_reference`) > 1
    AND `id_product_attribute` = 0
    AND `product_supplier_reference` > 0

但是正如你在product_supplier_reference 1426和4210上id_product_supplier相同,我可以在图片上看到一个。{/ p>

任何可以帮助我的人?​​

2 个答案:

答案 0 :(得分:1)

您需要将所有列添加到group by子句中,以便它可以工作:

SELECT `id_product_supplier` , `id_product` , 
       `product_supplier_reference` , COUNT( `product_supplier_reference` )
FROM `ps_product_supplier`
WHERE `product_supplier_reference` >0
GROUP BY `id_product`,`id_product_supplier`,`product_supplier_reference`  
HAVING COUNT( `product_supplier_reference` ) >1

答案 1 :(得分:1)

您需要减少select子句中列出的列数(这将减少行数)或者在group by子句中添加更多列名(这会增加行数)或者在更多列上使用聚合函数。

请注意,HAVING子句是为评估聚合值而设计的,您仍然可以使用WHERE子句进行聚合过滤。

## least rows
SELECT `id_product`
       Count(`product_supplier_reference`) 
FROM   `ps_product_supplier` 
WHERE  `id_product_attribute` = 0 
       AND `product_supplier_reference` > 0 
GROUP  BY `id_product`
HAVING Count(`product_supplier_reference`) > 1 

OR

## most rows
SELECT 
       `id_product`, 
       `id_product_attribute`, 
       `product_supplier_reference`, 
       Count(`product_supplier_reference`) 
FROM   `ps_product_supplier` 
WHERE  `id_product_attribute` = 0 
       AND `product_supplier_reference` > 0 
GROUP  BY `id_product`, 
          `id_product_supplier`, 
          `id_product_attribute`, 
          `product_supplier_reference` 
HAVING Count(`product_supplier_reference`) > 1