我正在使用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无法使用使用用户定义函数构建的列。
你们中有谁知道这个吗?
答案 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]