使用LEFT JOIN时SqliteDataReader和重复的列名

时间:2012-12-27 14:30:23

标签: sqlite

是否有关于Sqlite3的文档/规范会在以下情况下描述?

采取此查询:

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

ItemsFiles都有一个列名“ strColName ”。如果Files中存在条目,则它将加入结果,否则将为NULL。 假设我总是需要 strColName 的值,无论它来自Items还是来自Files。如果我执行一个读者:

var reader = cmd.ExecuteReader();

如果Files中存在匹配项,reader["strColName"]显然会包含正确的结果,因为该值已设置且两个表中的值相同。但如果Files中没有匹配项,Files的NULL值是否会覆盖Items的非NULL值?

我真的在寻找一些规范来定义Sqlite3实现如何处理这种情况,这样我就可以信任这两种结果。

1 个答案:

答案 0 :(得分:1)

SQLite返回多个标有相同名称的列没有问题。 但是,列将始终以与SELECT语句中写入的顺序完全相同的顺序返回。 因此,当您搜索"strColName"时,您会找到第一个Items

建议使用显式列名而不是*,以便顺序清楚,并且如果需要,您可以按列索引访问值(并检测表结构中的不兼容更改)。 / p>