选择MySQL中目录的唯一产品信息

时间:2014-08-27 17:07:34

标签: mysql select replace

我有一个带有一些产品目录的表。桌子上有一个主店,说明所有产品的价格。例如,对于主要商店,IDShop是9999,一个产品可以是Red Card = 10美元,原始OriginIDProduct = 101。

IDShop=9999
Price=10
OriginIDProduct=101

其他商店包括不同的信息,如不同的描述或不同的价格等。

例如,假设这个数据:

IDShop=1
Price=12
OriginIDProduct=101

在同一张桌子上,请记住......

我需要从商店9999中选择产品,但如果存在商店1的产品,则不要返回商店9999的商品信息。

在本例中,SELECT返回记录

IDShop=1
Price=12
OriginIDProduct=101

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

这将显示每个产品,如果它存在,则显示商店1的价格,否则它将默认为9999商店。

SELECT IFNULL(t2.IDShop, t1.IDShop) AS IDShop,
       IFNULL(t2.Price, t1.Price) AS Price,
       IFNULL(t2.OriginIDProduct, t1.OriginIDProduct) AS OriginIDProduct
FROM table AS t1
LEFT JOIN table AS t2 ON t1.OriginIDProduct = t2.OriginIDProduct AND t2.IDShop = 1
WHERE t1.IDShop = 9999

http://sqlfiddle.com/#!2/ca86b6/1

答案 1 :(得分:0)

select 
    IDShop, Price, OriginIDProduct
from 
    table
where
    IDShop <> 9999 
    or
    (   
        IDShop = 9999 
        and not exists (select IDShop from table where IDShop <> 9999)
    )

答案 2 :(得分:0)

最后在巴马的帮助下找到了解决方案,就是:

SELECT IFNULL(t2.IDShop, t1.IDShop) AS IDShop,
       IFNULL(t2.Price, t1.Price) AS Price,
       IFNULL(t2.OriginIDProduct, t1.OriginIDProduct) AS OriginIDProduct
FROM table AS t1
LEFT JOIN table AS t2 ON t1.OriginIDProduct = t2.OriginIDProduct AND t2.IDShop = 1
WHERE t1.IDShop = 9999
UNION ALL
SELECT IDShop, Price, OriginIDProduct FROM table WHERE IDShop=1 AND OriginIDProduct=0

感谢所有人。 此致,奥斯卡。