Mysql 允许使用IN子句重复记录

Mysql 允许使用IN子句重复记录,mysql,select,in-clause,Mysql,Select,In Clause,这似乎是一项简单的任务,但我想我不知道该用什么词在网上找到它 我想要的只是: 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 也就是说,概念是选

这似乎是一项简单的任务,但我想我不知道该用什么词在网上找到它

我想要的只是:

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
也就是说,概念是选择与子句中指定的行数相同的行数,即使一个值被多次指定

编辑 下面是一个简单的测试环境()

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;
INSERT INTO products VALUES (1, 'Apple', 5), (2, 'Orange', 6), (3, 'Grape', 10), (4, 'Watermelon', 20), (5, 'Cashew', 7);
2-喂桌子

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;
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;
根据提供的数据样本和fiddle更新,您可以为您的案例转换查询,如:


你能提供数据样本和预期结果集吗?@Alex我刚刚发布了一个fiddle我看到你拒绝了我的编辑,但是由于双括号的原因,查询有一个Sintax错误。我还认为我可以删除您的
id
定义,因为我没有注意到这是一个别名。