考虑下表
--------------------------------
ID | ColA | ColB | ColC
--------------------------------
1 | ABC | |
2 | | XYZ |
3 | PQR | |
4 | MNO | PQR |
现在我必须在这个表中添加一个值(EFG),其中ID = 1
在任何列中,如ColA
、ColB
或ColC
,取决于哪个是空闲的(空的)。这是动态或编程完成的(考虑任何语言,我只想知道逻辑)。
例如:
如果是ID = 1
,列ColB
将更新为值,因为它是第一个可用列
如果是ID = 2
,列ColA
将更新为值,因为它是第一个可用列
如果是ID = 3
,列ColB
将更新为值,因为它是第一个可用列
如果是ID = 4
,列ColC
将更新为值,因为它是第一个可用列。
由于记录已经插入,您只需要更新行
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
将此作为起点:
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
试试这个:
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
、ColB
和ColC
都已满,您不会定义行为应该是什么,但在上面给出的示例代码中,什么都不会改变。