【发布时间】: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_0是SUPNUM_0的外键,是吗?然后应该能够执行 JOIN 而不是子查询。 -
尝试将
=更改为IN,或转换为JOIN,或使用WHERE EXISTS而不是WHERE NUM_0。任何都应该工作。
标签: sql-server tsql sql-update