在mysql中选择2行或更多行

时间:2015-04-17 13:27:00

标签: mysql

我需要一个SQL查询,我从列supplierX获得供应商价格,但我只想要比较2个或更多价格的结果。对于2个供应商,我使用此代码:

select * 
from ps_product 
join ps_product_lang on ps_product.id_product = ps_product_lang.id_product 
join pricecompare on ps_product.id_product = pricecompare.id_product 
where 
    supplier1 > 0 and supplier2 > 0 
order by 
    ps_product.id_product desc 

我如何为6家供应商做到这一点?

样本表:

id   prod_name  ref  supplier1   supplier2   supplier3   supplier4
------------------------------------------------------------------
12   abcd       123    0            0           0         12,00 
13   sdsd       423   10,4          0           0         12,00 
14   aaa        413   10,4         10,00        0         12,00 

我希望结果是:

13   sdsd    423    10,4    0      0      12,00 
14   aaa     413    10,4   10,00   0      12,00 

我想要所有包含2个或更多供应商价格的行。

此致 佩德罗

2 个答案:

答案 0 :(得分:1)

您好我同意Andriy的设计已经破解您应该有单独的桌面供应商,您将拥有所有供应商,而不是将所有这些与多个关系连接在一起,但如果您想继续这种方式,您可以尝试做这样的事情:

SELECT *
FROM myTable
WHERE ((CASE WHEN supp1 > 0 THEN 1 ELSE 0 END) +
       (CASE WHEN supp2 > 0 THEN 1 ELSE 0 END) +
       (CASE WHEN supp3 > 0 THEN 1 ELSE 0 END) +
       (CASE WHEN supp4 > 0 THEN 1 ELSE 0 END)) >= 2

这是SQL小提琴,看看它是如何工作的:http://sqlfiddle.com/#!9/b96e5/21

GL!

答案 1 :(得分:0)

我建议您将供应商转移到单独的数据库,并将列supplier_id添加到您的表中。

所以查询将如下所示:

select *,count(distinct supplier_id) As count_suppliers from ps_product join ps_product_lang on ps_product.id_product=ps_product_lang.id_product join pricecompare on ps_product.id_product=pricecompare.id_product HAVING count_suppliers>6 order by ps_product.id_product desc