如何将Currency表的单个因子值与Product表Price字段所有行相乘?
问题分析与解决
你的SQL语句报错的核心原因有两个:
- 若
Currency表存在多行数据,子查询select factor from Currency会返回多个值,无法直接与Product.Price执行乘法运算 - 用逗号分隔两张表属于交叉连接,会让
Product的每一行和Currency的每一行强制匹配,产生大量重复数据,不符合你“单个因子乘所有价格”的需求
正确SQL写法
根据Currency表的实际数据情况,选择对应写法:
情况1:Currency表仅含一行数据(符合你描述的“单个因子值”)
写法1:子查询获取因子(无需连接表)
SELECT Product.ID, Product.Price * (SELECT factor FROM Currency) AS NewPrice, Product.weight, Product.description FROM Product;
写法2:CROSS JOIN(仅当Currency只有一行时适用)
SELECT p.ID, p.Price * c.factor AS NewPrice, p.weight, p.description FROM Product p CROSS JOIN Currency c;
情况2:Currency表有多行,需指定某一行的因子
比如要使用货币代码为USD的因子,添加筛选条件即可:
SELECT p.ID, p.Price * (SELECT factor FROM Currency WHERE CurrencyCode = 'USD') AS NewPrice, p.weight, p.description FROM Product p;
或使用JOIN写法:
SELECT p.ID, p.Price * c.factor AS NewPrice, p.weight, p.description FROM Product p JOIN Currency c ON c.CurrencyCode = 'USD'; -- 替换为你的实际筛选条件
内容的提问来源于stack exchange,提问作者bob24
相关产品推荐
相关产品推荐

