0

当我在两个不同的表中有两个具有相同名称但数据类型不同的列时。

我可以加入这两个表吗?

4

2 回答 2

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);

在表的一个列上使用函数将阻止使用该列可能具有的任何索引,在这种情况下,如果连接非常重要并且表很大,您可能需要考虑基于函数的索引.

FWIW,列名也不必相同,名称无关紧要,重要的是数据以及是否可以将其操作为可以与您需要匹配的列匹配的格式。

希望能帮助到你...

于 2012-08-02T13:00:45.877 回答
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'
于 2012-08-04T09:12:05.413 回答