是否有关于Sqlite3的文档/规范会在以下情况下描述?
采取此查询:
var cmd = new SqliteCommand("SELECT Items.*, Files.* FROM Items LEFT JOIN Files ON Files.strColName = Items.strColName");
Items
和Files
都有一个列名“ strColName ”。如果Files
中存在条目,则它将加入结果,否则将为NULL。
假设我总是需要 strColName 的值,无论它来自Items
还是来自Files
。如果我执行一个读者:
var reader = cmd.ExecuteReader();
如果Files
中存在匹配项,reader["strColName"]
显然会包含正确的结果,因为该值已设置且两个表中的值相同。但如果Files
中没有匹配项,Files
的NULL值是否会覆盖Items
的非NULL值?
我真的在寻找一些规范来定义Sqlite3实现如何处理这种情况,这样我就可以信任这两种结果。
答案 0 :(得分:1)
SQLite返回多个标有相同名称的列没有问题。
但是,列将始终以与SELECT
语句中写入的顺序完全相同的顺序返回。
因此,当您搜索"strColName"
时,您会找到第一个Items
。
建议使用显式列名而不是*
,以便顺序清楚,并且如果需要,您可以按列索引访问值(并检测表结构中的不兼容更改)。 / p>