我正在处理一项要求我在表格中插入两行的作业,其中每行包含一个计算字段。除了P.CODE之外,这两个语句都是相同的,但尽管如此,一个SQL语句中计算字段的值之一显示为null。我检查了产品表,其中包含SUM中使用的其中一个值,并且没有发现任何异常情况。任何人都可以弄清楚为什么我为一个语句而不是另一个语句获得null值?
SQL
INSERT INTO line(inv_number, line_number, p_code, line_units, line_price)
VALUES(1009, 1, '23109-HB', 5, (SELECT SUM(p_price * line_units)
FROM product JOIN line USING (P_CODE)
WHERE p_code = '23109-HB'));
--LINE_PRICE OF NULL BEING INSERTED HERE
INSERT INTO line(inv_number, line_number, p_code, line_units, line_price)
VALUES(1009, 2, '14-Q1/L3', 2, (SELECT SUM(p_price * line_units)
FROM product JOIN line USING (P_CODE)
WHERE p_code = '14-Q1/L3'));
输出
1009 1 23109-HB 5 49.8
1009 2 14-Q1/L3 2 (null)
SUM函数中使用的产品表中的数据
14-Q1/L3 9.00-in. pwr. saw blade 12-FEB-14 18 12 17.5 0 21344
23109-HB Claw hammer 19-FEB-14 23 10 9.95 0.1 21225
**更新 我想我可能已经弄明白它实际上非常明显而且有点令人尴尬。在"线"中排成一排。已经具有p_code值23109-HB的表,因此它对那些行进行了计算。领域。但是,行表中没有p_code值为14-Q1 / L3的行,因此SQL语句的line_price计算为NULL!有没有办法可以将SUM与来自同一insert语句的数据一起使用,或者这些值是否必须存在于表中? (对不起,如果这是一个糟糕的问题,我是新的)
答案 0 :(得分:1)
如果我了解您的要求,您可以使用WITH子句来实现这一目标:
WITH C AS(
SELECT p_code, p_price, line_units
FROM product JOIN line USING (P_CODE)
WHERE p_code = '23109-HB'
)
INSERT INTO line(inv_number, line_number, p_code, line_units, line_price)
SELECT 1009, 1, p_code, line_units, SUM(p_price * line_units) FROM C