加入两个表的条​​件?

时间:2012-08-02 09:55:42

标签: sql oracle plsql oracle10g

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

我可以加入这两张桌子吗?

2 个答案:

答案 0 :(得分: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并且桌子很大。

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

希望它有所帮助...

答案 1 :(得分: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'