我有一个包含NAME和ID列的表。例如,
[ID] [NAME]
1 John Lee
2 Ben Smith
我想切换两个用户的名称(他们的ID将保持不变)。但是,我正在使用的数据库不允许两个用户拥有相同的NAME(甚至不是NULL),因此我不能将“Ben Smith”设置为“John Lee”,除非没有用户拥有名称“John Lee”。
我想我可以通过PHP完成它并将它们的名字存储在变量中,然后进行查询以将两个NAME更改为随机的,然后将交换的NAME分配给用户。
但是有更优雅的方式吗?
答案 0 :(得分: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')
答案 1 :(得分: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