大家好 我们使用SQL 2005(MS),SQL更新列值2
我有一个存储的交易表。每次发生特定事件时,都会将3行添加到该表的特定事务中。
现在我们想要更改(更新)第1行中名为commision的列,第1行中的值为null,第2行中值为123的同一列的值是可能的?
大家好 我们使用SQL 2005(MS),SQL更新列值2
我有一个存储的交易表。每次发生特定事件时,都会将3行添加到该表的特定事务中。
现在我们想要更改(更新)第1行中名为commision的列,第1行中的值为null,第2行中值为123的同一列的值是可能的?
update mytable a
set commission = (select commission
from mytable b
where a.transaction = b.transaction
and b.event = 'row 2 event') // some value that selects row 2
where a.event = 'row 1 event' // some value that selects row 1
and a.transaction = 'specific transaction' // leave off for all transactions
从您的评论我已经重新格式化的声明是:
UPDATE PAYMENT a
SET COMMISSION= (SELECT COMMISSION
FROM PAYMENT b
WHERE b.PAYMENT_SEQ = 3
AND a.transaction_ID = b.TRANSACTION_ID)
WHERE a.PAYMENT_SEQ = 1
AND a.TRANSACTION_ID = 1234
为什么使用IN(1234)当= 1234是简单的,并得到了相同的结果。您可以在内部选择中匹配a.transaction_id = b.transaction_id,因此您不必在内部选择上重复您的1234事务选择。
此语法将与其他SQL版本一起使用,但不会像LarsH测试的那样与SQL Server 2005一起使用。该别名将不得不从声明中删除。
保罗,从你的示例代码的commision需要来自同一张表..所以我想要做的是设置事件commision 1从完全相同的表中进行事件2的调用......与您指定的不同(mytable b)。 – andreas 2010-10-22 11:44:46
我试过这个查询:UPDATE PAYMENT SET COMMISSION =(SELECT COMMISSION FROM PAYMENT P WHERE P.PAYMENT_SEQ = 3 AND TRANSACTION_ID IN(SELECT ID FROM TRANSACTION t WHERE ID IN(1234)))WHERE PAYMENT_SEQ = 1 AND TRANSACTION_ID IN(SELECT ID FROM TRANSACTION t WHERE ID IN(1234)) – andreas 2010-10-22 11:51:02
嗯... mytable a和mytable b引用同一张表。 – 2010-10-23 03:37:26
只是为了澄清,我想从同一个表中的行2不是不同的表 – andreas 2010-10-22 11:43:50