0

我对 SQL 比较陌生,需要为一个表组合一个 UPDATE 语句。

(我从一个 SELECT 语句开始,一旦我确定它正在工作,我就会创建 UPDATE 语句。)

所以我有一个表合同,每一行代表一份合同。一个客户可以有多个合同在桌子上,但合同编号总是加一。

我想为每个客户选择除最新(即最大合同编号)合同之外的所有合同。(这些是我将要更新的行)

我试过了

SELECT * From Contracts T1
WHERE EXISTS
(Select * from Contracts T2 WHERE
T1.CUST = T2.CUST AND T2.CONTRACTNUMBER < MAX(T1.CONTRACTNUMBER))

但是绿屏告诉我使用MAX无效。

我的语法一定是错误的——有什么帮助吗?!

4

2 回答 2

2

您可以将多个字段放在括号内,以便对照另一组中的行进行检查。

SELECT c.*
  FROM contracts c
  WHERE (c.cust, c.contractnbr) not in
    (SELECT m.cust, max(m.contractnbr)
       FROM contracts m
       GROUP BY cust
    )

IN如上所示,这个概念可能最有用,但也可以在其他查​​询中使用JOIN

FROM a JOIN b ON (a.x,a.y,a.z) = (b.x,b.y,b.z)
于 2013-11-11T14:59:39.877 回答
1

代替

T2.CONTRACTNUMBER < MAX(T1.CONTRACTNUMBER)

T2.CONTRACTNUMBER NOT IN (SELECT MAX(T3.CONTRACTNUMBER)
                            from Contracts t3 
                            WHERE T3.CUST=T2.CUST) 
于 2013-11-11T13:36:48.633 回答