1

私はクエリを持っています

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);

エラーメッセージが表示されます:

マルチパート識別子「Condition.ID」をバインドできませんでした。FROM 句のオブジェクト "Issue" と "Issue" は、公開されている同じ名前を持っています。相関名を使用してそれらを区別します。

上記で何を着用していますか?

4

1 に答える 1

2

問題テーブルに数回参加していますが、エイリアスは使用していません。句FROMの一部に同じテーブルを追加したため、これは特に問題です。SELECT結合では常にエイリアスを使用します。それが最も安全な方法です。

したがって、Issue.ID クエリ エンジンが参照しているエンジンを解決できないと言ったときはいつでも。それはFROM部分的なものか、部分的なものかJOIN

このコードを試してください:

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);

それとは別に、文字列連結の代わりにパラメーターを使用することを強くお勧めします。

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 = @0", issueId); // see the change in this line

いくつかの考えの後、これは実際には無効な SQL クエリです

あなたが抱えている問題は、ペタポコとはまったく関係ありません。実際には、無効な SQL クエリを作成しました。この同じステートメントを SSMS で実行すると、同じエラーが発生します。これは、クエリが次のように解釈されるためです。

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;

これが、最初の 2 つの結合が失敗する主な理由です。両方のテーブルが表示されるため、最後の 1 つだけが機能します。あなたはおそらく、あなたの選択がそれらのテーブルの結果を作り、次に次のように結合すると思ったでしょう:

SELECT * FROM (Issue I, Condition C, Result R, Status S)
    LEFT JOIN ...

しかし、そうではありません。

必要な結果の種類に応じて (結果として結果セットが大きくなる可能性があります)、クエリを別の形式に書き直して、FROM一部の複数テーブル リストを省略する必要があります。

于 2012-04-03T21:22:22.103 に答える