2010-07-18 3 views
1

J'ai 2 tables, chacune avec une colonne d'identité. Ce que je veux faire est de remplir une nouvelle table à deux colonnes avec ces identités de sorte qu'il en résulte un appariement des identités.Comment remplir une table à deux colonnes avec des données non liées provenant de deux sources différentes?

Maintenant, je suis parfaitement capable de remplir une colonne de ma nouvelle table avec les identités d'une des tables, mais je ne peux pas obtenir les identités de l'autre table dans ma nouvelle table. Si ce n'est pas la meilleure première étape à prendre, s'il vous plaît faites le moi savoir.

Merci

+0

Comment voulez-vous «coupler les identités? Voulez-vous joindre les deux tables à d'autres attributs, par ex. nom de la ville/état. –

+3

Désolé - juste relu - pourquoi voudriez-vous placer les identités de deux tables de données de _unrelated_ dans une table ???? –

+0

Oui, je me demandais cela aussi. Je pense que cela ne sera pas possible ou utile à moins que vous ne puissiez définir une relation entre eux. –

Répondre

2

Vous voudrez peut-être essayer quelque chose comme ce qui suit:

INSERT INTO t3 (id, value_1, value_2) 
SELECT t1.id, t1.value, t2.value 
FROM t1 
JOIN t2 ON (t2.id = t1.id); 

cas de test (MySQL):

CREATE TABLE t1 (id int, value int); 
CREATE TABLE t2 (id int, value int); 
CREATE TABLE t3 (id int, value_1 int, value_2 int); 

INSERT INTO t1 VALUES (1, 100); 
INSERT INTO t1 VALUES (2, 200); 
INSERT INTO t1 VALUES (3, 300); 

INSERT INTO t2 VALUES (1, 10); 
INSERT INTO t2 VALUES (2, 20); 
INSERT INTO t2 VALUES (3, 30); 

Résultat:

SELECT * FROM t3; 
+------+---------+---------+ 
| id | value_1 | value_2 | 
+------+---------+---------+ 
| 1 |  100 |  10 | 
| 2 |  200 |  20 | 
| 3 |  300 |  30 | 
+------+---------+---------+ 
3 rows in set (0.00 sec) 
+0

Génial. Oui, il semblait que je devais juste avoir un certain type de relation. Comme vous l'avez illustré ci-dessus, en créant 2 tables, chacune avec 2 colonnes, je peux alors créer une relation "fausse" et les amener toutes deux simultanément. Merci beaucoup! – gorndor

1

Vous pouvez remplir une table avec la syntaxe INSERT...SELECT et le SELECT peut être le résultat d'une jointure entre deux tables (ou plus).

INSERT INTO NewTable (col1, col2) 
    SELECT a.col1, b.col2 
    FROM a JOIN b ON ...conditions...; 

Donc, si vous pouvez exprimer le jumelage comme SELECT, vous pouvez l'insérer dans votre table.

Si les deux tables sont sans lien et qu'il n'y a aucun moyen d'exprimer l'appariement, alors vous demandez comment créer un magasin de données non relationnel, et il n'y a pas de règles relationnelles pour cela.

0

Une option serait de créer un compteur pour chacune des colonnes qui fonctionnerait comme un identifiant unique, puis rejoindre sur le compteur.

Pour SQL Server cela fonctionne:

SELECT one.column1, two.column2 
FROM (SELECT RANK() OVER (ORDER BY column1) AS id, 
      column1 
     FROM table1) one 
LEFT JOIN (SELECT RANK() OVER (ORDER BY column2) AS id, 
        column2 
      FROM table2) two ON one.id = two.id 
Questions connexes