如何动态选择表中空闲的列



考虑下表

--------------------------------
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将更新为值,因为它是第一个可用列。

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

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

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

相关内容

  • 没有找到相关文章

最新更新