学习SQL所以请原谅我。
我有一个包含许多帐户(和子帐户)的表和另一个包含许多订单的表,它们是从不同数据库中获取的自定义表。
我要做的是使用orders表中的order_val值更新帐户表上的order_amt,但如果该帐户有多个订单,我只想从最早的订单日期开始订购。
帐户表
Acc _Num..........Comp_Name.......Order_Amt.......Int_Id
123456789-1.....ABC Ltd.......................................123456789
123456789-2.....ABC Ltd.......................................123456789
987654321-1.....Xyz Ltd.........................................987654321
987654321-2.....Xyz Ltd.........................................987654321
订单表
Order_Num.....Order_Dt.....Order_Val.....Acc_num
1......................01/01/13......£20.00...........123456789
2......................01/01/14......£10.00...........123456789
3......................01/01/10......£100.00..........987654321
4......................01/01/11......£200.00..........987654321
因此,账户的订单号为123456789-1& 2 =£20.00和987654321-1& 2将是100英镑。
UPDATE accounts a
SET a.order_amt =
(
SELECT order_val
FROM orders o
WHERE a.int_id = o.acc_num
AND EXISTS
(
SELECT MIN(order_dt)
FROM orders oa
WHERE o.order_num = oa.order_num
);
我收到一些错误,包括多行返回的错误?有人可以帮帮我吗?
亲切的问候
伊甸园
答案 0 :(得分:0)
我认为你需要这样的东西:
UPDATE accounts a
SET a.order_amt =
(
SELECT order_val
FROM orders o
WHERE a.int_id = o.acc_num
GROUP BY order_val
HAVING order_dt = MIN(order_dt);
);
答案 1 :(得分:0)
在订单表内的account_number
列上创建 FK ,并让它引用auto-increment account id
表的accounts
。
然后正如Roger建议的那样,稍微修改一下int_id列并修改HAVING
子句
UPDATE accounts a
SET a.order_amount =
(
SELECT order_value
FROM orders o
WHERE a.account_number = o.account_number
GROUP BY order_value
HAVING MIN(order_date)
)
这不会修复因返回多行而发生的错误,因为有多个订单附加了相同的帐户ID。您需要更具体地了解您的需求。您是否希望所有订单金额的平均值等于帐户表中的订单值?或者可能是MAX / MIN值?