2012-08-02 62 views
0

當我在兩個不同的表中有兩個同名的列但數據類型不同時。加入兩張表的條件?

我可以加入這兩張表嗎?

+1

給你的表結構的例子,它們可能有共同的哪些元素 – BugFinder 2012-08-02 09:57:20

回答

2

是的,你可以。

如果您有:

TABLE_A 

A_ID NUMBER 
DEPT NUMBER 

TABLE_B 

B_ID NUMBER 
DEPT VARCHAR2 

如果你確信在TABLE_B.DEPT值是數字,但作爲一個字符串存儲,那麼你可以:

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

甚至

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

在其中一個表的列上使用函數將會阻止使用該列上可能存在的任何idex,在這種情況下,如果連接非常重要,您可能需要考慮function-based index,並且表ar大。

FWIW,列名稱不一定是相同的,名稱是無關緊要的,它的數據是重要的,它是否可以操縱成一種格式,可以與需要匹配的列進行匹配。

希望它有幫助...

0

是的,你可以加入表格。但是,如果您想要使用相同的名稱對列進行尋址,則必須在列名之前指定表的名稱。

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

那麼你會解決諸如TABLE1.B或TABLE2.B列。例如

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

如果表名很長的這可能會變得複雜,所以你可以定義一個相當於爲每個表像這樣

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'