有啥方法可以将价值从一个单元格转移到另一个单元格?
Posted
技术标签:
【中文标题】有啥方法可以将价值从一个单元格转移到另一个单元格?【英文标题】:Any way to transfer value from one cell to another?有什么方法可以将价值从一个单元格转移到另一个单元格? 【发布时间】:2008-10-09 19:07:10 【问题描述】:在 SQL 语言或 mysql(或其他 DBMA)中有什么方法可以将值从一个单元格传输到另一个单元格?例如,假设有一个名为 user_cars 的表,其结构如下:
|id| |user_name| |num_cars|
Bob 有 5 辆汽车,而 John 有 3 辆汽车。有没有办法在一个查询中从 Bob 中减去 2 辆汽车并将 2 到 John 中?我知道这可以通过两个更新查询来完成,但我想知道是否有更有效的方法。
【问题讨论】:
【参考方案1】:对于 Oracle,您可以这样做。不知道mysql中有没有等价的。显然,这个特定的陈述非常具体到你所说的例子。
UPDATE user_cars
SET num_cars = num_cars +
CASE WHEN user_name='Bob' THEN -2
WHEN user_name='John' THEN +2
END
WHERE user_name IN ( 'Bob', 'John' )
【讨论】:
【参考方案2】:这会起作用,但并不令人愉快:
UPDATE USER_CARS UC
SET
NUM_CARS = NUM_CARS + CASE WHEN UC.USER_NAME = 'Bob'
THEN -2 --take from bob
WHEN UC.USER_NAME = 'John'
THEN 2 --give to John
ELSE 0 --no change for anybody else
END
【讨论】:
您仍应使用 WHERE 子句来限制要更新的行数(仅限 Bob 和 John)。添加零会产生相同的值,但它仍然算作事务日志、触发器等的更改。包含许多行的表会导致性能下降。【参考方案3】:这就是交易的用途......
【讨论】:
【参考方案4】:正如其他人所解释的,您可以使用 CASE 语句来做到这一点。 然而,这样做可能是不明智的,因为它使代码的意图更难看出。这将使后续程序员更难理解代码的用途。
除非您有某些特定原因需要在一个语句中执行此操作,否则最好的做法是使用 2 个更新语句,如果需要,将它们包装在一个事务中。
我经常想起这句话(虽然我不得不在wikiquote上查找出处):
“必须编写程序供人们阅读,并且只是偶然地供机器执行。” - Abelson & Sussman,SICP,第一版序言
【讨论】:
【参考方案5】:如果您真的想在一个查询中执行此操作,则可以对表的自连接进行更新,但它的可读性和效率可能较低。
【讨论】:
【参考方案6】:我同意 Jonas Klemming 的观点,没有一种有意义的方法可以做到这一点。这正是交易被发明的目的。
【讨论】:
以上是关于有啥方法可以将价值从一个单元格转移到另一个单元格?的主要内容,如果未能解决你的问题,请参考以下文章
tvOS tableView 从一个单元格到另一个单元格平滑滚动
将数据从集合视图单元格内的表视图单元格传输到另一个集合视图单元格 [带图片!]
将特定文本从一个范围内的一个单元格移动到另一个范围内的另一个单元格