0

我需要将一组数字与另一组数字交换。

y          z         pk       x
------     ------    ------   -----
1           2         1        5
1           3         2        5
1           4         3        5
5           6         4        5
5           7         5        5
5           8         6        5
1           2         7        9
1           3         8        9
5           6         9        9
1           4         10       9
5           7         11       9
5           8         12       9

我需要在 x = 9 的 y 列中所有 1 都为 5,所有 5 都为 1。y 和 z 字段具有无法删除的 FK 约束。

4

2 回答 2

4
UPDATE table
SET y = 6 - y
WHERE x = 9

笔记:

y如果列中有其他值x = 9不需要被触及,不要忘记添加类似的东西

AND y IN (1,5)

编辑:

交换任何两个数字的一​​般公式ab

UPDATE tbl
SET col= (a+b) - col
WHERE col IN (a,b)
于 2013-07-11T07:10:43.277 回答
-1

假设您知道主键并且它们是连续的:

UPDATE table SET y = 5 WHERE pk BETWEEN 7 AND 9;
UPDATE table SET y = 1 WHERE pk BETWEEN 10 AND 12;

否则,我会将相关行的主键选择到临时表中:

SELECT pk INTO TEMPORARY TABLE temp1 FROM table WHERE x = 9 AND y = 1;
SELECT pk INTO TEMPORARY TABLE temp2 FROM table WHERE x = 9 AND y = 5;

UPDATE table AS t FROM temp1 SET y = 5 WHERE t.pk = temp1.pk
UPDATE table AS t FROM temp2 SET y = 1 WHERE t.pk = temp2.pk
于 2013-07-11T07:16:34.507 回答