获取“无连接谓词”警告即使我使用“内连接”

时间:2010-09-30 15:43:00

标签: sql sql-server-2008

我正在使用SQL Server 2008 R2,我有一个内部连接3个表的查询:

select * from  t1 INNER JOIN t2 on t1."Account Key" = t2."Account Key"
INNER JOIN t3 on t2."Account Key" = t3."Account Key"

问题是我在第二个内连接上收到“无连接谓词”警告;除此之外,它正在进行第一次连接生成的表与t3的交叉乘积,这使查询永远运行(除了给出错误的结果)。

我运行了以下查询,以查看最后一次加入的两边是否有相同的帐户密钥:

select "Account Key" from  t1 INNER JOIN t2 on t1."Account Key" = t2."Account Key"
INTERSECT 
select "Account Key" from t3 on t2."Account Key" = t3."Account Key"

我得到0行,这意味着在联接的两边没有相同的帐户键。但是,原始查询不应该给出0行而不是给出交叉产品,因为我使用的是“内连接”?

更新:t3实际上是一个视图,其[帐户密钥]列实际上是一个计算列:

CAST(bid AS varchar(5)) + '-' + dbo.ConvertNumericToPaddedChar(RMKEY, 20) AS [Account Key]

更新:dbo.ConvertNumericToPaddedChar(RMKEY,20)是造成问题的原因。似乎在进行内部联接时,SQL Server无法使用使用用户定义函数构建的列。

你们中有谁知道这个吗?

1 个答案:

答案 0 :(得分:1)

我不确定为什么你的例子不起作用。尝试使用[方括号]而不是“引号”包围列名。

select * from  t1
INNER JOIN t2 on t1.[Account Key] = t2.[Account Key]
INNER JOIN t3 on t2.[Account Key] = t3.[Account Key]