2010-10-12 3 views
0

c'est en réalité a followup from a previous question mais il contient des informations différentes, j'ai donc décidé de commencer un nouveau sujet. Résumé:combinant deux tables identiques (en fait des champs de table) en un

J'ai 2 tables un TMP_TABLE et un BKP_TABLE. Les deux ont la même structure de champ et les mêmes types de données pour les champs (avec des données presque identiques).

disons TMP_TABLE est construit comme celui-ci

TMP_TABLE 

NAME  PREFIX  PARAMETERS 
data  data  data 
data  data  data 
data  data  data 

et BKP_TABLE ressemble à ce

BKP_TABLE 

NAME  PREFIX  PARAMETERS 
data1  data1  data1 
data1  data1  data1 
data1  data1  data1 

Est-il possible de combiner ces deux tables en une seule qui ressemble à ceci

END_RESULTTABLE 


    NAME  PREFIX  PARAMETERS 
    data  data1  data1 
    data  data1  data1 
    data  data1  data1 

Comme vous pouvez le voir, je souhaite supprimer un des champs et le remplacer par un autre. La séquence est à peu près la même, donc je n'ai pas à m'inquiéter des enregistrements incorrects.

Une question de côté

Au moment TMP et BKP contiennent exactement les mêmes données (113 enregistrements) quand je fais

SELECT * FROM TMP_TABLE 
UNION ALL 
SELECT * FROM BKP_TABLE 

Je reçois 226. Pourquoi cela se produit. Je pensais que les entrées en double (que je peux voir clairement) n'apparaîtraient pas dans ma table virtuelle.

EDIT:

Je voudrais remplacer un champ de TMP_data avec le champ BKP_table (exemple comme le nom).

+1

Pour l'instant ce n'est pas du tout clair ce que vous voulez faire. Que diriez-vous de quelques données (simples) réalistes plutôt que simplement le mot «données» répété partout? –

Répondre

0

En supposant que vos deux tables ont une clé en commun (par exemple le nom) , vous pouvez faire quelque chose comme ceci:

create table end_resulttable as 
select t.name, t.prefix, b.parameters 
from tmp_table t, bkp_table b 
where t.name = b.name; 

C'est ce que vous voulez dire?

+0

Je suis aussi allé aussi loin, malheureusement, il ne fait pas tout à fait ce que je veux. Parce que maintenant il multiplie mes enregistrements, quand je fais cela, j'obtiens 113 * 113 enregistrements dans mon nouveau end_resulttable.Et ce que je veux (si c'est possible), c'est juste remplacer un champ de données. Je vais faire une modification à mon message. – jovany

+0

Si vous avez 113 * 113 lignes, soit un produit cartésien, cela signifie que vous n'avez pas spécifié de condition de jointure ("où t.name = b.name" dans ma réponse) - OU que la colonne sur laquelle vous vous êtes joint n'est pas une clé, et a la même valeur dans toutes les 113 lignes! –

+0

Est-ce que vos tables contiennent des clés, ou espérez-vous simplement "aligner" la ligne 1 du tableau A avec la ligne 1 de la table B et ainsi de suite? Si oui, les bases de données ne fonctionnent pas comme ça. –

2
UNION ALL 

retournera tous (d'où le ALL) les enregistrements des deux sélections

UNION 

va supprimer les doublons

+0

Merci pour la réponse. Malheureusement, j'ai essayé le syndicat avant d'essayer le syndicat. Et les deux me donnent le même résultat. – jovany

+0

@jovany, oui, bien sûr: 'UNION' supprime * les doublons *. Si les lignes ne sont pas complètement identiques, elles ne sont pas des doublons. –

+0

aha bien sûr, donc pour mes yeux ils ont probablement "look" identique mais content content il y a probablement une légère différence. Je vous remercie. – jovany

Questions connexes