0

我得到一个令人困惑的选择......结果,表定义是:

CREATE TABLE modes (
               key INTEGER,
               mode INTEGER,
               channel INTEGER,
               name TEXT,
               short_name TEXT,
               def INTEGER,
               highlight INTEGER,
               catagory TEXT,
               subcatagory TEXT);

它填充了:

sqlite> select * from modes;
  3|6|5|Green|G|0|255|a|b
  3|6|6|Blue|B|0|255|a|b
  3|9|1|Mode|Mode|0|255|a|b
  3|9|2|Auto Mode Speed|Speed|0|255|a|b
  3|9|3|Strobe|Strobe|0|255|a|b
  3|9|4|Red|R|0|255|a|b
  3|9|5|Green|G|0|255|a|b
  3|9|6|Blue|B|0|255|a|b
  3|9|7|Red2|R2|0|255|a|b
  3|9|8|Green2|G2|0|255|a|b
  3|9|9|Blue2|B2|0|255|a|b
  3|6|4|Red|R|0|255|a|b
  3|6|1|6|6|0|255|a|b
  3|6|2|Auto mode speed|speed|0|255|a|b
  3|6|3|Strobe|Strobe|0|255|strobe|b

注意倒数第三行: 3|6|1|6|6|0|255|a|b

如果我选择: SELECT * FROM modes where mode=6 and name="Mode" order by channel;

它返回: 3|6|1|6|6|0|255|a|b

第 4 列和第 5 列(名称和短名称)不应该匹配,它们是 6,匹配项是“模式”。如果我将匹配字符串“Mode”更改为任何其他字符串,它会按预期工作。“模式”是保留字吗?或者我是否以某种方式将变量“模式”设置为 6?我不明白这种行为。

4

3 回答 3

2

如果你使用 ["] 它意味着列,所以当你这样做时

name="Mode"

这意味着您搜索与列模式具有相同值的列名。因此,您实际上在代码中选择 where mode=6 和 name=6 。如果要使用字符串,请使用 ['] 而不是 ["]

我尝试在我的数据库上使用该代码..

select * from products
where name="Mode"

我得到了错误

ERROR:  column "Mode" does not exist
LINE 2: where name="Mode"
于 2013-02-21T03:35:01.883 回答
1

如果其他人正在寻找,我终于在文档中找到了它。它在sqlite3 常见问题解答中

于 2013-02-24T17:00:39.993 回答
0

我不熟悉 sqlite3,但我会说它看起来像你在做 name="Mode" ,它正在获取模式.mode 对象并检查它。

如果你这样做SELECT * FROM modes where name="Mode" order by channel。你可能会发现它也给了你3|6|1|6|6|0|255|a|b

于 2013-02-21T03:23:40.473 回答