有两个表,一个叫工票价格表 AS A,一个叫计件工资表 AS B
表A中的字段为:
ID 产品名 工序名 工价
1 000001 粗磨 0.1
2 000001 精磨 0.15
3 000002 精磨 0.2
4 000003 清洗 0.3
5 000004 粗滚 0.4
6 000005 精滚 0.5
7 000006 细道 0.6
8 000007 粗道 0.7表B为:
ID 产品名 工序名1 工价1 工序名2 工价2
1 000001 粗磨 精磨
2 000001 粗磨
3 000003 清洗 现在怎么得到工序1或者工序2的工价?表B是根据表A的产品和工序获得工价的
我自己写了一个脚本是:
UPDATE B
SET 工价1 =
(SELECT A.工价
FROM A, b
WHERE A.产品名 = B.产品名 AND A.工序名 = B.工序名1), 工价2 =
(SELECT A.工价
FROM A, b
WHERE A.产品名 = B.产品名 AND A.工序名 = B.工序名2)
但在运行的时候出现错误:子查询返回的值多于一个。当子查询跟随在=、!=、<、<=、>、>=之后,或子查询用做表达式时,这种情况是不允许的。
表A中的字段为:
ID 产品名 工序名 工价
1 000001 粗磨 0.1
2 000001 精磨 0.15
3 000002 精磨 0.2
4 000003 清洗 0.3
5 000004 粗滚 0.4
6 000005 精滚 0.5
7 000006 细道 0.6
8 000007 粗道 0.7表B为:
ID 产品名 工序名1 工价1 工序名2 工价2
1 000001 粗磨 精磨
2 000001 粗磨
3 000003 清洗 现在怎么得到工序1或者工序2的工价?表B是根据表A的产品和工序获得工价的
我自己写了一个脚本是:
UPDATE B
SET 工价1 =
(SELECT A.工价
FROM A, b
WHERE A.产品名 = B.产品名 AND A.工序名 = B.工序名1), 工价2 =
(SELECT A.工价
FROM A, b
WHERE A.产品名 = B.产品名 AND A.工序名 = B.工序名2)
但在运行的时候出现错误:子查询返回的值多于一个。当子查询跟随在=、!=、<、<=、>、>=之后,或子查询用做表达式时,这种情况是不允许的。
update B set B.工价1 = A.工价 from A,B A.产品名 = B.产品名 AND A.工序名 = B.工序名
UPDATE B
SET 工价1 =
(SELECT DISTINCT A.工价
FROM A, b
WHERE A.产品名 = B.产品名 AND A.工序名 = B.工序名1 AND
b.工序名1 IS NOT NULL), 工价2 =
(SELECT DISTINCT A.工价
FROM A, b
WHERE A.产品名 = B.产品名 AND A.工序名 = B.工序名2 AND
B.工序名2 IS NOT NULL)
但是这样的结果是:
ID 产品名 工序名1 工价1 工序名2 工价2
1 000001 粗磨 0.1 精磨 0.15
2 000001 粗磨 0.1 0.15
3 000003 清洗 0.1 0.15
这是为什么?