俱乐部两个SQL语句

时间:2014-11-21 06:19:09

标签: sql oracle

我有两个名为table1和table2的表。

Table1具有name和table1_id的映射。

Table2与table2_id和table1_id进行映射。

现在我希望所有table2_ids都有table1_id1而不是table1_id2,其中table1_id1和table2_id2是值。

并使用table1_id2插入上面的table2_ids,这使得如果执行上面的查询,它将返回' 0'行数。

我有两个sql语句

select table2_id from table2 where table2.table1_id = 
 (select table1_id from table1 where table1.name = 'name1')
minus 
select table2_id from table2 where table2.table1_id = 
 (select table1_id from table1 where table1.name = 'name2')

现在为所有上述table2_ids运行多个insert into语句

 Insert into table2 values (table2_id, 
 (select table1_id from table1 
 where table1.name = 'name2')) 

我的问题是将这个问题归结为单个sql。

示例:

表1

r1name r1id
r2name r2id

表2

l1id r1id
l1id r2id
l2id r1id
l3id r1id

如果我执行第一个sql命令,其输入名称分别为r1name和r2name,我会得到输出为" l2id,l3id"因为l1id与r1id和r2id映射,并且" l2id"," l3id"仅映射" r1id"。

执行第一个sql语句后的输出:

l2id
l3id

现在我想在table2中插入一行(l2id,r2id)和(l2id,r2id)

输出2"插入"表2中的语句执行

 l1id r1id
 l1id r2id
 l2id r1id
 l3id r1id
 l2id r2id
 l3id r3id.

1 个答案:

答案 0 :(得分:0)

尝试:

INSERT INTO table2 (table2_id, table1_id)
SELECT table2_id, 'name2'
FROM table2
WHERE table2_id IN 
   (SELECT table2_id FROM table2 WHERE table1_id = 'name1')
AND table2_id NOT IN 
   (SELECT table2_id FROM table2 WHERE table1_id = 'name2');