0

列 NAME と ID を持つテーブルがあります。例えば、

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

2 人のユーザーの名前を入れ替えたい (ID は同じままです)。ただし、私が使用しているデータベースでは、2 人のユーザーが同じ名前 (NULL でさえも) を持つことを許可していないため、"John Lee" という名前のユーザーがいない限り、"Ben Smith" を "John Lee" に設定することはできません。

PHP経由でそれを実行し、両方の名前を変数に保存してから、クエリを作成して2つの名前をランダムなものに変更し、スワップされた名前をユーザーに割り当てることができると思います。

しかし、もっとエレガントな方法はありますか?

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

私はこの解決策を持っています。1 つのトランザクションで名前を置き換えます。

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 に答える