0

DatabaseA - TableA - FieldA VARCHAR2
DatabaseB - TableB - FieldB NUMBER[ dblink created ]

SELECT *  
FROM TableB@dblink b  
INNER JOIN TableA a  
ON b.FieldB = a.FieldA  

有2个并发症。
1. FieldA 是VARCHAR2,但 FieldB 是NUMBER
2. FieldA 包含-,FieldB 包含0

有关字段
FieldA的更多信息:VARCHAR2(15)NOT NULL
示例值
-
123
没有非数字值,除了 -

FieldBNUMBER(5,0)
样本值
0
123
没有非数字值

如果FieldA ='-' OR FieldB = 0,我要做的是忽略行,否则将FieldA与FieldB进行比较。

SELECT *  
FROM TableB@dblink b  
JOIN TableA a  
  ON to_char(b.FieldB) = a.FieldA  

我收到以下错误:

SQL Error: 17410, SQLState: 08000
No more data to read from socket. 
4

1 回答 1

1
  1. NULL 永远不会与 equals 匹配,所以你的 join 已经处理好了。
  2. 您将获得(可能)NUMBER 到 VARCHAR 的隐式类型转换,因此也应该注意这一点。

话虽如此,我非常支持不依赖隐式数据类型转换。所以我会把我的查询写成

SELECT *  
FROM TableB@dblink b  
JOIN TableA a  
  ON to_char(b.FieldB) = a.FieldA  

如果这没有给出您想要的结果,那么在每个表中发布数据示例以及您想要的结果可能会有所帮助。

于 2017-01-17T15:12:48.277 回答