为什么不能在T-SQL联接中绑定我的字段?
因此,我有以下SQL语句:为什么不能在T-SQL联接中绑定我的字段?,sql,sql-server,tsql,Sql,Sql Server,Tsql,因此,我有以下SQL语句: SELECT CASE WHEN table1.Recommendation = 1 THEN 'Condition1' WHEN table1.Recommendation = 2 THEN 'Condition2' WHEN table1.Recommendation = 3 THEN 'Condition3' ELSE ' ' END AS Recommendation, table2.Notes,
SELECT
CASE
WHEN table1.Recommendation = 1 THEN 'Condition1'
WHEN table1.Recommendation = 2 THEN 'Condition2'
WHEN table1.Recommendation = 3 THEN 'Condition3'
ELSE ' '
END
AS Recommendation,
table2.Notes,
table3.ItemDescription AS Item,
table4.Description AS Concern
FROM Job
RIGHT JOIN table2 ON Job.JobId = table2.JobId
LEFT JOIN table1 ON table2.table2Id = table1.table2Id
INNER JOIN table3 ON table2.table3Id = table3.table3Id
LEFT JOIN table1 customName ON table4.table4Id = customName.table4Id
WHERE Job.JobId = @JobId AND table1.Condition = 3
这是用于telerik报告的,
JobId
变量将与实际的作业id一起输入。table2
保存JobId
,以及table1
id。我正试图获取table4.Description
,但每次我都得到错误:The multi-part identifier table4.table4Id could not be bound.
The multi-part identifier table4.Description could not be bound.
在这一点上,我不知道从这里尝试什么。任何帮助都将不胜感激!我将很乐意添加更多信息,尽可能解决这个问题您没有使用任何别名
表4
;因此,编译器会给出错误。基本上,您缺少一个连接。您只需添加联接条件
SELECT
CASE
WHEN table1.Recommendation = 1 THEN 'Condition1'
WHEN table1.Recommendation = 2 THEN 'Condition2'
WHEN table1.Recommendation = 3 THEN 'Condition3'
ELSE ' '
END
AS Recommendation,
table2.Notes,
table3.ItemDescription AS Item,
table4.Description AS Concern
FROM Job
RIGHT JOIN table2 ON Job.JobId = table2.JobId
LEFT JOIN table1 ON table2.table2Id = table1.table2Id
INNER JOIN table3 ON table2.table3Id = table3.table3Id
INNER JOIN table4 ON <I don't what what to join on>
LEFT JOIN table1 customName ON table4.table4Id = customName.table4Id
WHERE Job.JobId = @JobId AND table1.Condition = 3
选择
案例
当table1.Recommension=1时,则为“条件1”
当表1.建议=2时,则为“条件2”
当表1.建议=3时,则为“条件3”
否则“
结束
作为建议,
表2.注释,
表3.1项目说明作为项目,
表4.作为关注点的说明
从工作
右键联接Job.JobId=table2.JobId上的表2
左连接table2上的table1.table2Id=table1.table2Id
table2.table3Id=table3.table3Id上的内部联接table3
查看前面的答案和对话后,我认为最好的解决方案是翻转连接
SELECT
CASE
WHEN table1.Recommendation = 1 THEN 'Condition1'
WHEN table1.Recommendation = 2 THEN 'Condition2'
WHEN table1.Recommendation = 3 THEN 'Condition3'
ELSE ' '
END
AS Recommendation,
table2.Notes,
table3.ItemDescription AS Item,
table4.Description AS Concern
FROM Job
RIGHT JOIN table2 ON Job.JobId = table2.JobId
LEFT JOIN table1 ON table2.table2Id = table1.table2Id
INNER JOIN table3 ON table2.table3Id = table3.table3Id
RIGHT JOIN table4 ON table1.table4Id = table4.table4Id
WHERE Job.JobId = @JobId AND table1.Condition = 3
您的表table4
reall是否有一个名为table4id
的列?错误表明它不是。还有左连接表1客户名称
?你为什么不先调用表1
customName
呢?@Larnu是的,它确实有这个列。我必须使用customName
(不是它的实际名称),因为我收到一个错误,说我需要在table1
的第二个连接上使用相关名称,我没有看到任何join
到table4
。你希望如何获得table4。如果它不是JOIN
table???@Eric table4是最后一次JOIN的一部分。不,我没有看到它。我看到的唯一表格是Job
,table2
,table3
,customName
。盟友是什么?我被你的回答搞糊涂了,我该如何在那句话中使用别名?嗨,我的意思是你在上面的查询中缺少了表4,只需在查询中将表4更改为表2,就可以在表2中加入表1 customName。表2ID=customName。表2I在我的查询中有表4。我使用的是相关名称,因此customName
与table4
相同,但您没有提到table4中的任何连接。如果你想使用表4作为表,那么你必须与其他表连接。我看不出这与我所做的有什么不同,除了添加“内部连接表4”当然有区别。在您的例子中,您尝试获取一个甚至不存在的列。如何获取不在结果集中的表的列?在我的查询中,table4
是结果集的一部分,因此您可以获得列table4。Description
table4
显然是我的结果集的一部分:LEFT JOIN table1 customName ON table4.table4Id=customName.table4Id
。除非我遗漏了什么,否则我认为这意味着表4是我结果的一部分。这是我最后一次说。我显然没有在您的结果集中看到表4
。使用适当的表名,如Order、OrderDetail、Item,将比表1、表2更好。回到我的第一个问题,table4
来自哪里???它不在您的FROM
或JOIN
中。它只是神奇地出现了。