在两个表之间交换两列值
Swap two columns values between two tables
我有两个表 NAVEEN_T1 和 NAVEEN_T2,其中包含 Id 和 Name 等列。
如何根据Id交换两个表的name列值?
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
提前致谢。
你可以试试这个
update table1 t1
set t1.col1 = (select t2.col2
from table2 t2
where t2.id = t1.id
and t1.col1 < t1.col2)
类似的事情应该很容易做到。
我看到的唯一棘手的问题是将 table2 中的行与 table1 中的行进行匹配。在我的例子中,我假设两个表共享一个唯一的 "id" 列,这样可以轻松匹配。用更合适的内容修改查询。
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;
希望这能解决您的问题,我已经创建了备份表来捕获这些值。
您可以使用临时表而不是永久表
现在,这可能过于简单化了,但是嘿 - 这就是您的样本数据所暗示的。这个想法是:交换 table 名称,而不是数据。看看:
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>
我有两个表 NAVEEN_T1 和 NAVEEN_T2,其中包含 Id 和 Name 等列。
如何根据Id交换两个表的name列值?
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
提前致谢。
你可以试试这个
update table1 t1
set t1.col1 = (select t2.col2
from table2 t2
where t2.id = t1.id
and t1.col1 < t1.col2)
类似的事情应该很容易做到。
我看到的唯一棘手的问题是将 table2 中的行与 table1 中的行进行匹配。在我的例子中,我假设两个表共享一个唯一的 "id" 列,这样可以轻松匹配。用更合适的内容修改查询。
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;
希望这能解决您的问题,我已经创建了备份表来捕获这些值。 您可以使用临时表而不是永久表
现在,这可能过于简单化了,但是嘿 - 这就是您的样本数据所暗示的。这个想法是:交换 table 名称,而不是数据。看看:
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>