Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获得;“无连接谓词”;即使我正在使用“警告”;“内部连接”;_Sql_Sql Server 2008 - Fatal编程技术网

Sql 获得;“无连接谓词”;即使我正在使用“警告”;“内部连接”;

Sql 获得;“无连接谓词”;即使我正在使用“警告”;“内部连接”;,sql,sql-server-2008,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进行叉积,这使得查询永远运行(除了给出错误的结果) 我运行了以下查询,以查看

我使用的是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实际上是一个视图,其[Account Key]列实际上是一个计算列:

CAST(bid AS varchar(5)) + '-' + dbo.ConvertNumericToPaddedChar(RMKEY, 20) AS [Account Key]
更新:dbo.ConvertNumericToPaddedChar(RMKEY,20)是导致问题的原因。在进行内部联接时,SQL Server似乎无法使用使用用户定义函数生成的列


你们有谁知道这方面的方法吗?

我不知道为什么你们的例子不起作用。尝试将列名用[括号]而不是“引号”括起来


我不知道为什么你的例子不起作用。尝试将列名用[括号]而不是“引号”括起来


从联接列中删除“”后是否尝试过?我不太确定是否可以通过这种方式指定联接中的列。除此之外,这个问题对我来说似乎是绝对正确的me@In理智:这正是我的想法,但不是删除双引号,而是用方括号替换它们,如
[Account Key]
。或者运行
上设置带引号的标识符;这明确地允许双quotes@Andomar-啊哈!!列名中有一个空格!!只是不习惯期待那些让我的眼睛完全错过的东西!!:-)在那里接得好!!从联接列中删除“”后是否尝试过?我不太确定是否可以通过这种方式指定联接中的列。除此之外,这个问题对我来说似乎是绝对正确的me@In理智:这正是我的想法,但不是删除双引号,而是用方括号替换它们,如
[Account Key]
。或者运行
上设置带引号的标识符;这明确地允许双quotes@Andomar-啊哈!!列名中有一个空格!!只是不习惯期待那些让我的眼睛完全错过的东西!!:-)在那里接得好!!谢谢你的建议,我这样做了,我也尝试了“设置引用标识符”,但我仍然有同样的问题:(@Juan-列名正确吗?这是您的实际查询吗?回答您的问题可能需要更多信息。我的查询与我的问题中显示的相同,只是表名不同。表名实际上是对原始表进行简单选择的视图。视图的目的是为列提供更多人名(例如:[Account Key]而不是[acctky])。但是我的查询确实使用了一个名为[Account Key]的列。哦,等等!t3视图的[Account Key]实际上是一个计算列:CAST(以varchar(5)的形式投标)+'-'+dbo.ConvertNumericToPaddedChar(RMKEY,20)。这会有什么不同吗?谢谢你的建议,我这样做了,我还尝试了“设置引用标识符on”,但我还是有同样的问题(@Juan-列名正确吗?这是您的实际查询吗?回答您的问题可能需要更多信息。我的查询与我的问题中显示的相同,只是表名不同。表名实际上是对原始表进行简单选择的视图。视图的目的是为列提供更多人名(例如:[Account Key]而不是[acctky])。但是我的查询确实使用了一个名为[Account Key]的列。哦,等等!t3视图的[Account Key]实际上是一个计算列:CAST(以varchar(5)的形式投标)+'-'+dbo.ConvertNumericToPaddedChar(RMKEY,20)。这会有区别吗?
select * from  t1
INNER JOIN t2 on t1.[Account Key] = t2.[Account Key]
INNER JOIN t3 on t2.[Account Key] = t3.[Account Key]