【问题标题】:TSQL UPDATE based on MAX (Date) in other tableTSQL UPDATE 基于其他表中的 MAX(日期)
【发布时间】:2018-02-07 16:35:40
【问题描述】:

我希望有人能帮我解决我的问题。我有 2 张桌子:供应商和付款。

供应商表由供应商编号和指示帐户是否启用的标志组成。

Supplier
--------
NUM
ENAFLG

然后我有一个付款表,其中显示了供应商进行的所有付款,包括付款日期 (ACCDAT)。

Payment
-------
SUPNUM
ACCDAT

如果供应商的最后一次付款是在 '01/01/2016' 之前完成的,我需要做的是让供应商禁用。这是我所拥有的,但出现以下错误:

子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。 声明已终止。

我确实需要能够传递多个值来更新供应商表。

UPDATE dbo.SUPPLIER 
SET ENAFLG_0 = 1
WHERE NUM_0 = (SELECT pay.SUPNUM_0
               FROM dbo.PAYMENT AS pay
               JOIN dbo.SUPPLIER AS bps ON bps.NUM_0 = pay.SUPNUM_0
               GROUP BY pay.SUPNUM_0
               HAVING MAX(pay.ACCDAT_0) < '01/01/2016')

任何帮助将不胜感激!谢谢!

【问题讨论】:

  • NUM_0SUPNUM_0 的外键,是吗?然后应该能够执行 JOIN 而不是子查询。
  • 尝试将= 更改为IN,或转换为JOIN,或使用WHERE EXISTS 而不是WHERE NUM_0。任何都应该工作。

标签: sql-server tsql sql-update


【解决方案1】:
UPDATE dbo.SUPPLIER 
SET ENAFLG_0 = 1
WHERE NUM_0 in (select  pay.SUPNUM_0
                    from dbo.PAYMENT as pay
                    JOIN dbo.SUPPLIER as bps
                    on bps.NUM_0 =  pay.SUPNUM_0
                    GROUP BY pay.SUPNUM_0
                    Having MAX(pay.ACCDAT_0) < '01/01/2016'
                    )

【讨论】:

  • 不敢相信我错过了。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2018-11-19
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多