gpt4 book ai didi

sql - 使用 JOIN 更新表

转载 作者:行者123 更新时间:2023-12-02 22:28:39 24 4
gpt4 key购买 nike

我正在尝试编写 SQL 语句,但不断出现错误...

这是我的情况:

我有一张包含销售订单的表格和一张包含 Material 转移的表格。

销售订单有一个订单号和一个扩展名,其中 ID 本身可能不是唯一的,但订单号和扩展名的组合是唯一的。扩展名可以为空。

Material 转移表有一个引用编号,有时还有一个销售订单编号加上扩展名,但并非总是如此。

原因是有时会为销售订单转移 Material ,有时是出于其他原因。此外,销售订单可能在没有先转移 Material 的情况下发生。一张订单只能有一次转账,反之亦然。

我在销售订单表中添加了一个字段“transref”,以便可以将订单连接到转移(如果适用)。 (出于性能原因,无法即时计算此信息。)所以我的表格现在看起来像这样(它们实际上更大,但这是重要信息):

SALESORDERS
ORDERNO ORDEXT TRANSREF
1 (null) (null)
2 (null) (null)
2 a (null)
3 (null) (null)

TRANSFERS
TRANSREF ORDERNO ORDEXT
t1 1 (null)
t2 (null) (null)
t3 2 a

现在我需要将 transref 代码放入销售订单表中,如下所示:

SALESORDERS
ORDERNO ORDEXT TRANSREF
1 (null) t1
2 (null) (null)
2 a t3
3 (null) (null)

我尝试了各种语句,例如

UPDATE SALESORDERS 
INNER JOIN TRANSFERS
ON SALESORDERS.ORDERNO = TRANSFERS.ORDERNO and (SALESORDERS.ORDEXT = TRANSFERS.ORDEXT or (SALESORDERS.ORDEXT is null and TRANSFERS.ORDEXT is null))
SET SALESORDERS.TRANSREF = TRANSFERS.TRANSREF
WHERE TRANSFERS.ORDERNO IS NOT NULL

但到目前为止没有任何效果。在尝试了十几个教程和答案后,有人可以帮我解开我脑中的结吗?

最佳答案

由于您多次将其称为 AS/400,我假设您使用的是旧版本的操作系统。您可能需要一个相关的子选择。像这样的东西:

update salesorders o
set transref = (select t.transref
from transfers t
where o.orderno = t.orderno
and (o.ordext = t.ordext or (t.ordext=null and o.ordext=null))
and t.transref <> null)
where ordext = null;

关于sql - 使用 JOIN 更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12604385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com