3

次の場合に発生するはずのことを説明する Sqlite3 に関するドキュメント/仕様はありますか?

次のクエリを実行します。

var cmd = new SqliteCommand("SELECT Items.*, Files.* FROM Items LEFT JOIN Files ON Files.strColName = Items.strColName");

と の両方ItemsFiles列名 " strColName " があります。エントリが に存在する場合Filesは結果に結合され、存在しない場合は NULL になります。からのものであろうとなかろうと、 strColNameの値が常に必要であると仮定しましょう。リーダーを実行すると:ItemsFiles

var reader = cmd.ExecuteReader();

に一致するものがある場合、値が設定され、両方のテーブルで同じであるためFiles、 にreader["strColName"]は明らかに正しい結果が含まれます。しかし、 に一致がなかった場合、 の NULL 値はの非FilesNULL 値を上書きしますか?FilesItems

どちらの結果も信頼できるように、Sqlite3 実装がこのケースに対処する方法を定義する仕様を本当に探しています。

4

1 に答える 1

1

SQLite は、同じ名前のラベルが付いた複数の列を問題なく返します。ただし、列は常に、ステートメントに記述されている順序とまったく同じ順序で返されますSELECT。したがって、 を検索する"strColName"と、最初の から が見つかりますItems

代わりに明示的な列名を使用することをお勧めします。*これにより、順序が明確になり、必要に応じて列インデックスで値にアクセスできます (また、テーブル構造に互換性のない変更が検出されます)。

于 2012-12-29T15:02:26.000 に答える