当我在两个不同的表中有两个具有相同名称的列但数据类型不同时。
我可以加入这两张桌子吗?
答案 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'