2012-08-02 4 views
0

Lorsque j'ai deux colonnes avec le même nom dans deux tables différentes mais avec des types de données différents. Puis-je joindre ces deux tables?Joindre des conditions pour deux tables?

+1

Donnez des exemples de la structure de votre table, et quels sont les éléments qu'ils ont en commun, – BugFinder

Répondre

2

Oui, vous pouvez.

Si vous avez:

TABLE_A 

A_ID NUMBER 
DEPT NUMBER 

et

TABLE_B 

B_ID NUMBER 
DEPT VARCHAR2 

Si vous étiez sûr que les valeurs étaient TABLE_B.DEPT numérique mais stockées dans une chaîne que vous pourriez alors:

SELECT * 
    FROM TABLE_A 
    JOIN TABLE_B 
    ON (TABLE_A.DEPT = TO_NUMBER(TABLE_B.DEPT)); 

ou même

SELECT * 
    FROM TABLE_A 
    JOIN TABLE_B 
    ON (TO_CHAR(TABLE_A.DEPT) = TABLE_B.DEPT); 

L'utilisation d'une fonction sur l'une des colonnes de la table annulera l'utilisation de toute idéx que cette colonne a pu contenir, auquel cas vous pouvez envisager un function-based index si la jointure est très importante et que les tables sont grand. FWIW, les noms de colonne ne doivent pas nécessairement être identiques, les noms sont irrelevent, ce sont les données qui comptent et si elles peuvent être manipulées dans un format qui peut être comparé aux colonnes dont vous avez besoin. .

Espérons que cela aide ...

0

Oui, vous pouvez joindre les tables. Mais si vous voulez adresser la colonne avec le même nom, vous devez spécifier le nom de la table avant le nom de la colonne.

TABLE1 has columns A number, B number 
TABLE2 has columns A number, B varchar2(10) 

Puis vous adresser les colonnes comme TABLE1.B ou TABLE2.B. Exemple

SELECT TABLE1.A, TABLE1.B, TABLE2.B 
FROM TABLE1, TABLE2 
WHERE TABLE1.A = TABLE2.A 
    AND TABLE1.B > 10 
    AND TABLE2.B = 'FOO' 

Si les noms de tables sont très longues cela peut devenir compliqué de sorte que vous pouvez définir un équivalent pour chaque table comme celui-ci

SELECT x.A, x.B, y.B 
FROM TABLE1 x, TABLE2 y 
WHERE x.A = y.A 
    AND x.B > 10 
    AND y.B = 'FOO'