使用不同表中的列更新列,表之间没有相关性

时间:2016-07-15 19:07:21

标签: sql oracle

我有两张桌子。

  • 一个叫做tcolor,有2列。一个被称为" ID"而另一个被称为"颜色"颜色列用十六进制颜色值填充。 ID列都是空值。
  • 我在同一个数据库中有另一个名为testg的表。 testg只有一列名为" ID"。

我想使用testg的ID列更新(而不是INSERT)tcolor的ID列。

如果没有收到ORA-01427错误,我该怎么做?

另外,为了将ID转换为testg,我在下面使用了这个查询。有没有办法将此查询更改为UPDATE语句,以便我不必将一个表的一列拉入另一个表。

我的意思是,接受此查询,将其转换为更新语句,以便我可以直接更新我的tcolor ID列。

INSERT INTO testg 
            (id) 
SELECT DISTINCT terr_id 
FROM   (SELECT DISTINCT jta.terr_id, 
                        jta.name, 
                        low_value_char, 
                        comparison_operator, 
                        high_value_char, 
                        jtva.last_update_date, 
                        jtva.creation_date 
        FROM   jtf_terr_values_all jtva, 
               jtf_terr_qual_all jtqa, 
               jtf_terr_all jta 
        WHERE  jtva.terr_qual_id = jtqa.terr_qual_id 
               AND jtqa.terr_id = jta.terr_id 
               AND jta.end_date_active > SYSDATE 
               AND jta.name LIKE 'US%' 
               AND low_value_char IS NOT NULL 
               AND comparison_operator IN ( '=' ) 
               AND Regexp_like (low_value_char, '^[[:digit:]]+$') 
        ORDER  BY 6 DESC); 

1 个答案:

答案 0 :(得分:0)

通过它的声音,您有一个表(testg),并且您希望能够为该表中的每个id分配/链接不同的颜色,但该分配是任意的。

我选择了一个简单的循环。我假设有足够的颜色条目,你不会用完。一旦停止查找要更新的行,就可以通过退出循环来使其变得更加智能。

declare
    cursor c_1 is
    select distinct testg.id
    from testg;
begin
    for r_1 in c_1 loop
        update tcolor
        set id = r_1.id
        where id is null
        and rownum = 1;
    end loop;
    commit;
end;
/