0

我有一个包含 NAME 和 ID 列的表。例如,

[ID] [NAME]
 1   John Lee
 2   Ben Smith

我想切换两个用户的名称(他们的 ID 将保持不变)。但是,我正在使用的数据库不允许两个用户具有相同的 NAME(甚至不是 NULL),所以我不能将“Ben Smith”设置为“John Lee”,除非没有用户具有 NAME“John Lee”。

我想我可以通过 PHP 完成并将他们的两个名称存储在一个变量中,然后进行查询以将两个名称更改为随机名称,然后将交换的名称分配给用户。

但是有没有更优雅的方式呢?

4

2 回答 2

1

使用案例表达式

Update Table set
  name = case name 
         when 'John Lee' then 'Ben Smith'
         when 'Ben Smith' then 'John Lee' End
From table 
Where name in ('John Lee', 'Ben Smith')
于 2013-09-05T07:56:41.710 回答
0

我有这个解决方案。它在一个事务中替换名称。

DECLARE @names AS TABLE (id INTEGER, name VARCHAR(50), UNIQUE(name))

INSERT INTO @names (id, name) VALUES (1, 'John')
INSERT INTO @names (id, name) VALUES (2, 'Ben')


UPDATE N SET name = N2.name
FROM @names N
INNER JOIN (VALUES(1,2),(2,1)) S (old, new) ON N.id = S.old
INNER JOIN @names N2 ON S.new = N2.id

SELECT * FROM @names
于 2013-09-05T07:56:38.927 回答