2

考虑下表

--------------------------------
ID   | ColA    | ColB   | ColC
--------------------------------
1    | ABC     |        |
2    |         | XYZ    |
3    | PQR     |        |
4    | MNO     | PQR    |

现在我必须在此表中添加一个值(EFG),ID = 1在任何列中,如ColAColBColC取决于哪个是免费的(空的)。这是动态或编程完成的(考虑任何语言,我只想知道逻辑)。

例如:

如果ID = 1,列ColB将使用值更新,因为它是第一个空闲列。
如果ID = 2,列ColA将使用值更新,因为它是第一个空闲列。
如果ID = 3,列ColB将使用值更新,因为它是第一个空闲列。
如果ID = 4,列ColC将使用值更新,因为它是第一个空闲列。

4

3 回答 3

3

由于记录已经插入,您只需要更新行,

UPDATE  tableName
SET     ColA = CASE WHEN ColA IS NULL THEN 'NewValue' ELSE ColA END,
        ColB = CASE WHEN ColA NOT NULL AND ColB IS NULL THEN 'NewValue' ELSE ColB END,
        ColC = CASE WHEN ColA NOT NULL AND ColB NOT NULL AND ColC IS NULL THEN 'NewValue' ELSE ColC END
WHERE   ID = 1
于 2013-02-12T03:17:04.807 回答
0

尝试这个:

UPDATE table
   SET ColA=IF(ColA IS NULL, 'EFG', ColA),
       ColB=IF(ColA IS NULL, ColB, IF(ColB IS NULL, 'EFG', ColB)),
       ColC=IF(ColA IS NULL, ColC, IF(ColB IS NULL, ColC, IF(ColC IS NULL, 'EFG', ColC)))
 WHERE ID=1

ColA如果、ColBColC都已满,您没有定义行为应该是什么,但在上面给出的示例代码中,什么都不会改变。

于 2013-02-12T03:18:29.530 回答
0

以此为起点:

UPDATE Table Set 
ColA = CASE WHEN ColA IS NULL THEN 'EFG' ELSE ColA END,
ColB = CASE WHEN ColB IS NULL THEN 'EFG' ELSE ColB END,
ColC = CASE WHEN ColC IS NULL THEN 'EFG' ELSE ColC END
WHERE ID = 1
于 2013-02-12T03:17:12.277 回答