Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据表之间匹配的值插入/更新标志_Sql_Oracle - Fatal编程技术网

Sql 根据表之间匹配的值插入/更新标志

Sql 根据表之间匹配的值插入/更新标志,sql,oracle,Sql,Oracle,我想制定一个程序,其中: 如果表B中存在ID,但表A中不存在ID,则代码将插入/更新为0。 否则,如果ID同时存在于两个表中,则“代码”字段将被插入/更新为1。 我有两张桌子,例如: Table A Table B +----+--+--+----+------+ | ID | | | Id | Code | +----+--+--+----+------+ | 1 | | | 1 | 0 | | 2 | | | 2 | 0 | | 3 | | |

我想制定一个程序,其中:

如果表B中存在ID,但表A中不存在ID,则代码将插入/更新为0。 否则,如果ID同时存在于两个表中,则“代码”字段将被插入/更新为1。 我有两张桌子,例如:

Table A      Table B
+----+--+--+----+------+
| ID |  |  | Id | Code |
+----+--+--+----+------+
|  1 |  |  |  1 |    0 |
|  2 |  |  |  2 |    0 |
|  3 |  |  |  3 |    0 |
|  4 |  |  |  4 |    0 |
|    |  |  |  5 |    0 |
|    |  |  |  6 |    0 |
+----+--+--+----+------+
你能帮我吗

最后的表B应该是这样的:

+----+------+
| Id | Code |
+----+------+
|  1 |    1 |
|  2 |    1 |
|  3 |    1 |
|  4 |    1 |
|  5 |    0 |
|  6 |    0 |
+----+------+

如下所示:使左连接生成表B的值(表A中不存在),然后合并以更新列代码

您可以使用:


请在下面找到您的问题的答案

create table TABLEA (ID int);

insert into TABLEA (ID) values (1);
insert into TABLEA (ID) values (2);
insert into TABLEA (ID) values (3);
insert into TABLEA (ID) values (4);
insert into TABLEA (ID) values (5);

create table TABLEB (ID int, code int);

insert into TABLEB (ID,code) values (1,0);
insert into TABLEB (ID,code) values (2,0);
insert into TABLEB (ID,code) values (3,0);
insert into TABLEB (ID,code) values (4,0);
insert into TABLEB (ID,code) values (5,0);
insert into TABLEB (ID,code) values (6,0);
insert into TABLEB (ID,code) values (7,0);
insert into TABLEB (ID,code) values (8,0);

UPDATE TABLEB SET CODE=1 FROM TABLEB B INNER JOIN TABLEA as A on A.id=B.id;

SELECT * FROM TABLEB;

ID  CODE
1   1
2   1
3   1
4   1
5   1
6   0
7   0
8   0

到目前为止你得到了什么?你是什么意思罗伯特?请不要要求我们为你写代码。首先,真诚地尝试自己解决问题。询问现有实施中的具体问题。堆栈溢出不是代码编写服务。你真是太好了,罗伯特!我有一个问题要解决,并没有要求你们编写正确的代码,我只是问我如何解决我的问题,你们可以说->使用合并。但不管怎样,这很重要。幸运的是,并不是所有的人都像你那么粗鲁。我不是有意粗鲁的。我为您提供了一个如何提问的链接。遵循这些规则会给你更好的答案。”“合并”是您问题的一个可能答案。答案还有很多,甚至可能更好。你的问题太广泛了。此外,描述你已经尝试过的东西和任何研究的结果也是一种很好的做法。
MERGE into tableB B
USING tableA A
ON (a.id = b.id)
WHEN MATCHED THEN
    UPDATE SET code = 1
WHEN NOT MATCHED THEN
    INSERT (id,code) values (a.id, 0)
create table TABLEA (ID int);

insert into TABLEA (ID) values (1);
insert into TABLEA (ID) values (2);
insert into TABLEA (ID) values (3);
insert into TABLEA (ID) values (4);
insert into TABLEA (ID) values (5);

create table TABLEB (ID int, code int);

insert into TABLEB (ID,code) values (1,0);
insert into TABLEB (ID,code) values (2,0);
insert into TABLEB (ID,code) values (3,0);
insert into TABLEB (ID,code) values (4,0);
insert into TABLEB (ID,code) values (5,0);
insert into TABLEB (ID,code) values (6,0);
insert into TABLEB (ID,code) values (7,0);
insert into TABLEB (ID,code) values (8,0);

UPDATE TABLEB SET CODE=1 FROM TABLEB B INNER JOIN TABLEA as A on A.id=B.id;

SELECT * FROM TABLEB;

ID  CODE
1   1
2   1
3   1
4   1
5   1
6   0
7   0
8   0