エラーが発生した理由は、エイリアシングAS X
が原因です。 。しかし、問題は実際には*
を使用したことです 、必要なフィールドを一覧表示する代わりに。
最初のクエリでは、SELECT *
実際には次のようなフィールドを生成します:
A.id, A.name, A.description, B.id, B.name, B.date_started, C.id, C.name, C.isDeleted
これは、フィールドをその名前で直接参照しようとし、そのエイリアスを使用しない限り、正常に機能します。いずれにせよ、SQLエンジンでこれに問題が発生することはありませんが、結果セットで何をしていても問題が発生する可能性があります。
ただし、クエリをサブクエリに移動し、結果をAS X
にエイリアスすると 、その後、次のようになります:
X.id, X.name, X.description, X.id, X.name, X.date_started, X.id, X.name, X.isDeleted
今、あなたはそれが不平を言っている理由を見ることができます。 *
を使用するのも悪い理由がわかります 、この組み合わせは一定期間機能する可能性があるため、既存のテーブルに新しいフィールドを追加します。これは別のテーブルと同じです。これらのテーブルの両方で作成したすべてのクエリは、次のようにする必要があります。書き直しました。