SQL:如何使用预定义的值集更新空列

时间:2015-05-07 14:23:32

标签: sql

我有一张桌子,比方说,100条记录。该表有两列。第一列(A)具有唯一值。第二列(B)具有NULL值

对于A栏中的4个元素,我想关联一些早先定义的值,它们也是唯一的。

Example

我不关心B列中的哪个值与A列中的值相关联。我想将4个唯一值与另外4个唯一值相关联。基本上,就像我在excel中将一个值块从一列剪切并粘贴到另一列中一样。

如何在不使用游标的情况下执行此操作?

我想为所有行使用一个Update语句,而不是像现在一样对每行使用一个Update语句。

3 个答案:

答案 0 :(得分:0)

试试这个:

getIntent()

在'预定义'中使用您想要的任何数字。表,只要它们是唯一的并且在原始表的columnA中的值范围内。

答案 1 :(得分:0)

如果您只是为了测试目的而填写表格,我想您可以:

A)使用A列本身的值(因为它已经是唯一的)。

B)如果它们不同,请在A列的值上使用一些函数来获得B列值(简单的,如(ColumnA * 10),这样就可以得到A)

C)使用"字典"创建临时表。为每个可能的A值设置B值,然后从该字典表上的值中查找表中所需的行。

无论如何,如果你进一步解释一下你的目的会更容易尝试建议你一个解决方案。

答案 2 :(得分:-2)

如果您的动物数据已经在数据库表中,那么您可以使用如下的单个更新语句:

update target_table t4 
set columnb = (
    select animal_name 
    from (select columna, animal_name 
            from (select rownum rowNumber, animal_name from animal_table) t1
                join (select rownum rowNumber, columna from target_table t1 where columnb is null) t2
                on t1.rowNumber = t2.rowNumber
            ) t3 
    where t4.columna = t3.columna
    )
;

这可以通过从源表中选择序列号和动物名称,然后从目标表中选择序列号和columna值来实现。通过在序列号上加入这些记录,您可以保证每个columna值都能得到1个动物名称。然后,您可以将这些columna-to-animal记录加入目标表,以更新columnb。

有关从另一个表中的值更新一个表的更多背景知识,您可以考虑此处提供的解决方案:Update rows in one table with data from another table based on one column in each being equal。唯一的区别是,在您的示例中,您没有任何匹配目标表和动物名称表的列,因此您需要使用rownum创建任意的1对1记录匹配。

如果您的唯一选项位于文本文件或电子表格中,那么您可以将它们格式化为固定宽度的空格填充字符串,并使用rownum索引选择所需的字符串,如下所示:

update table_name 
set columnb = trim(substr('mouse cat   dog   wolf  ', rownum*6-6, 6)) 
where columnb is null;