2017-03-29 2 views
0

J'ai deux tables table1 et table2. Ces tables ont des colonnes uniques name et id.Instruction Oracle INSERT avec sélection dans différentes tables

J'ai aussi une table de relation/jointure, table1_table2 qui a les colonnes directes table1_id et table2_id.

Ce que je veux faire est d'insérer une nouvelle relation dans table1_table2 connaître les name s des éléments dans table1 et table2 Je veux créer une relation. Mais je dois obtenir leurs id s pour les insérer dans table_table2.

Ce que je veux est quelque chose comme ça:

insert into table1_table2 values ((select id from table1 where name = 'some_name'), (select id from table2 where name = 'another_name')) 

J'ai aussi essayé d'utiliser

insert into table1_table2 values ((select id from (select id from table1 where name = 'some_name') where rownum=1), (select id from (select id from table2 where name = 'another_name') where rownum=1)) 

qui a également ne fonctionne pas. Je comprends que je peux d'abord extraire les id s si nécessaire, mais je préférerais que ce soit dans une déclaration.

Edit: J'ai aussi essayé

insert into table1_table2 values (select t1.id, t2.id from table1 t1, table2 t2 where t1.name = 'some_name' and t2.name = 'another_name') 

qui a également ne fonctionne pas

données Exemple:

table1 
id name 
1 foo 
2 bar 

table2 
id name 
1 some 
2 data 

table1_table2 
table1.id table2.id 
1   1 

et maintenant je veux insérer

table1.id table2.id 
2   2 

en table1_table2, mais je d o seulement savoir que l'entrée dans table1 a le namebar et l'entrée dans table2 a le namedata.

+0

Certaines données d'exemple et une vue plus claire des structures de la table peuvent aider. Voulez-vous les ID de chaque table où les noms correspondent - pour tous les noms, ou un spécifique, puisque vous avez montré «nom» comme corrigé? Que faire si un nom n'apparaît que dans l'une ou l'autre table? –

+0

Veuillez expliquer ce que «ne fonctionne pas» signifie. –

Répondre

1

Cela devrait fonctionner:

INSERT INTO table1_table2 (table1_id, table2_id) 
    VALUES ((SELECT id FROM table1 WHERE name = 'some_name'), 
      (SELECT id FROM table2 WHERE name = 'another_name') 
      ); 

Cependant, je l'écrire comme:

INSERT INTO table1_table2 (table1_id, table2_id) SELECT t1.id, t2.id DE table1 t1 REJOIGNEZ table2 t2 ON t1.name = 'un_nom' AND t2.name = 'autre_nom';

Notez dans ce cas s'il n'y a aucune correspondance dans aucune des tables, aucune ligne n'est insérée du tout. En utilisant VALUES, une valeur NULL serait insérée.

+0

Merci beaucoup, cela a fonctionné :) –