在两个表之间交换两列值

时间:2018-03-09 11:56:13

标签: mysql oracle10g

我有两张表NAVEEN_T1和NAVEEN_T2,其中包含Id和Name等列。

如何根据Id?

交换两个表的名称列值
 

SQL> SELECT * FROM NAVEEN_T1;

ID         NAME
---------- ----------
1          GOLDI
2          NAVEEN
3          AMIT

SQL> SELECT * FROM NAVEEN_T2;

ID         NAME
---------- ----------
1          RANJAN
2          SOM
3          ABHAY

我希望输出如下:


SQL> SELECT * FROM NAVEEN_T1;

ID         NAME
---------- ----------
1          RANJAN
2          SOM
3          ABHAY

SELECT * FROM NAVEEN_T2;

ID         NAME
---------- ----------
1          GOLDI
2          NAVEEN
3          AMIT

提前致谢。

3 个答案:

答案 0 :(得分:0)

你可以试试这个

update table1 t1
set    t1.col1 = (select t2.col2
                  from   table2 t2
                  where  t2.id = t1.id
                  and    t1.col1 < t1.col2)

这样的事情应该很容易做到。

我看到的唯一棘手的问题是将table2中的行与table1中的行匹配。在我的例子中,我认为两个表共享一个唯一的&#34; id&#34;能够轻松匹配的列。使用更合适的内容修改查询。

答案 1 :(得分:0)

CREATE TABLE naveen_t1
    (`id` int, `name` varchar(6))
;

INSERT INTO naveen_t1
    (`id`, `name`)
VALUES
    (1, 'GOLDI'),
    (2, 'NAVEEN'),
    (3, 'AMIT')
;


CREATE TABLE naveen_t2
    (`id` int, `name` varchar(6))
;

INSERT INTO naveen_t2
    (`id`, `name`)
VALUES
    (1, 'RANJAN'),
    (2, 'SOM'),
    (3, 'ABHAY')
;
create  table naveen_t1_b 
as 
select * from naveen_t1;
create  table naveen_t2_b 
as 
select * from naveen_t2;

update naveen_t1 ta set  ta.name=(select tb.name
                                  from naveen_t2_b tb where tb.id=ta.id);
update naveen_t2 ta set  ta.name=(select tb.name
                                  from naveen_t1_b tb where tb.id=ta.id);
select * from naveen_t1;
select * from naveen_t2;

希望这会解决您的问题,我创建了备份表来捕获值。 您可以使用临时表而不是永久表

点击此处 - http://sqlfiddle.com/#!9/fdc52e/2

答案 2 :(得分:0)

现在,这可能过于简单,但嘿 - 这就是您的样本数据所暗示的内容。这个想法是:交换表名,而不是数据。看看:

SQL> create table naveen_t1 (id number, name varchar2(20));

Table created.

SQL> create table naveen_t2 (id number, name varchar2(20));

Table created.

SQL> insert all
  2    into naveen_t1 values (1, 'GOLDI')
  3    into naveen_t1 values (2, 'NAVEEN')
  4    into naveen_t1 values (3, 'AMIT')
  5    --
  6    into naveen_t2 values (1, 'RANJAN')
  7    into naveen_t2 values (2, 'SOM')
  8    into naveen_t2 values (3, 'ABHAY')
  9  select * from dual;

6 rows created.

SQL> select * From naveen_t1;

        ID NAME
---------- --------------------
         1 GOLDI
         2 NAVEEN
         3 AMIT

SQL> select * From naveen_t2;

        ID NAME
---------- --------------------
         1 RANJAN
         2 SOM
         3 ABHAY

这是技巧

SQL> rename naveen_t2 to temp;

Table renamed.

SQL> rename naveen_t1 to naveen_t2;

Table renamed.

SQL> rename temp to naveen_t1;

Table renamed.

SQL> select * from naveen_t1;

        ID NAME
---------- --------------------
         1 RANJAN
         2 SOM
         3 ABHAY

SQL> select * From naveen_t2;

        ID NAME
---------- --------------------
         1 GOLDI
         2 NAVEEN
         3 AMIT

SQL>