允许使用子句中的重复记录



这似乎是一个简单的任务,但我想我不知道在Internet上找到它的合适单词。

我想要的就是这样:

SELECT SUM(price) FROM products WHERE id IN (5, 10, 10, 10, 13, 15, 18, 18);

这将使我从基本上返回:

的结果
price_of_5 + price_of_10 + price_of_10 + price_of_10 + 
price_of_13 + price_of_15 + price_of_18 + price_of_18

也就是说,即使在 in 子句中指定的值,的的数量与的指定行相当多。

编辑

这是一个简单的测试环境(或小提琴)

1-创建表

CREATE TABLE products (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL,  
  `price` float NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

2-喂桌子

INSERT INTO products VALUES (1, 'Apple', 5), (2, 'Orange', 6), (3, 'Grape', 10), (4, 'Watermelon', 20), (5, 'Cashew', 7);

3-我想要的示例:

SELECT SUM(price) FROM products WHERE id IN (1, 2, 2, 4);

导致:31(5 6 20)

预期:37(5 6 6 20)

这是我的方法:

SELECT SUM(p.price) 
FROM (
        SELECT 5 id
        UNION ALL 
        SELECT 10 
        UNION ALL
        SELECT 10 
        UNION ALL
        SELECT 10 
        UNION ALL
        SELECT 13 
        UNION ALL
        SELECT 15 
        UNION ALL
        SELECT 18 
        UNION ALL
        SELECT 18 
    ) as t
INNER JOIN products p
ON t.id = p.id;
根据数据样本和小提琴,

UPDATE 您可以为您的情况转换查询,例如:

http://sqlfiddle.com/#!9/189bc/4

SELECT SUM(p.price) 
FROM (
        SELECT 1 id
        UNION ALL 
        SELECT 2 
        UNION ALL
        SELECT 2 
        UNION ALL
        SELECT 4 
     ) as t
INNER JOIN products p
ON t.id = p.id;

相关内容

  • 没有找到相关文章

最新更新