Tsql MultiPOCO查询触发错误消息
我有一个疑问Tsql MultiPOCO查询触发错误消息,tsql,petapoco,Tsql,Petapoco,我有一个疑问 return Connection.db.Fetch<Issue, Condition , Result , Status>( "SELECT * FROM Issue I, Condition C, Result R, Status S " + "LEFT JOIN Issue ON Condition .ID = Issue.ConditionID" + "LEFT JOIN Issue ON Result.ID = Issue.Result
return Connection.db.Fetch<Issue, Condition , Result , Status>(
"SELECT * FROM Issue I, Condition C, Result R, Status S " +
"LEFT JOIN Issue ON Condition .ID = Issue.ConditionID" +
"LEFT JOIN Issue ON Result.ID = Issue.ResultID" +
"LEFT JOIN Issue ON Status.ID = Issue.StatusID " +
"WHERE Issue.ID= "+ issueId);
返回Connection.db.Fetch(
“从问题I、条件C、结果R、状态S中选择*”+
“条件上的左连接问题。ID=问题。条件ID”+
“Result.ID=Issue.ResultID上的左连接问题”+
“Status.ID=Issue.StatusID上的左加入问题”+
“WHERE Issue.ID=“+issueId”);
这将发出错误消息:
无法绑定多部分标识符“Condition.ID”。
FROM子句中的对象“Issue”和“Issue”具有相同的公开名称。使用相关名称来区分它们
上面是怎么回事?您多次加入问题表格,但绝不使用别名。这尤其是一个问题,因为您已将相同的表添加到
FROM
部分的SELECT
子句中。在联接中始终使用别名。这是最安全的方法
所以,每当您说Issue.ID时,查询引擎都无法解析您指的是哪一个。它是从部分中的中的还是加入
部分中的
请尝试以下代码:
return Connection.db.Fetch<Issue, Condition , Result , Status>(
"SELECT * FROM Issue I, Condition C, Result R, Status S " +
"LEFT JOIN Issue i1 ON C.ID = i1.ConditionID" +
"LEFT JOIN Issue i2 ON R.ID = i2.ResultID" +
"LEFT JOIN Issue i3 ON S.ID = i3.StatusID " +
"WHERE I.ID = " + issueId);
这就是前两个连接失败的主要原因。最后一个是唯一有效的,因为它可以同时看到两个表。您可能认为select生成了这些表的结果,然后按如下方式进行连接:
SELECT * FROM (Issue I, Condition C, Result R, Status S)
LEFT JOIN ...
但事实并非如此
根据您想要的结果类型(您可能会以这样做的方式得到一个大的结果集),您必须将查询重写为另一种形式,并可能从部分中省略中的多表列表。感谢您的回复,我仍然有一个错误,即多部分标识符“C.ID”无法绑定。无法绑定多部分标识符“P.ID”。我看不到任何P别名。您确定您遇到的问题在此查询中吗?很抱歉,我意外更改了消息…无法绑定多部分标识符“C.ID”。无法绑定多部分标识符“R.ID”。@学习:我编辑了我的答案来解释问题,但我无法为您提供解决方案,因为我不知道您实际想要什么样的结果。主要的问题是,您遇到的这个问题与PetaPoco无关,而是您的查询无效。事实上,问题在于查询。谢谢你,罗伯特
SELECT * FROM Issue I, Condition C, Result R,
(Status S
LEFT JOIN Issue i1
ON C.ID = i1.ConditionID
LEFT JOIN Issue i2
ON R.ID = i2.ResultID
LEFT JOIN Issue i3
ON S.ID = i3.StatusID
)
WHERE I.ID = x;
SELECT * FROM (Issue I, Condition C, Result R, Status S)
LEFT JOIN ...