我得到一个令人困惑的选择...结果,表定义是:
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行: 第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列(name和short_name)不匹配,它们是6,匹配项是" Mode"。如果我更改匹配字符串"模式"到任何其他字符串它按预期工作。是" Mode"保留字?或者我是否以某种方式设置变量" Mode"到6?我不明白这种行为。
答案 0 :(得分:2)
如果您使用[“],则表示列,所以当您执行
时name="Mode"
这意味着您在列名称中搜索与列模式具有相同值的值。因此,您可以在代码中选择mode = 6和name = 6的位置。 如果要使用字符串,请使用[']而不是[“]
我尝试在我的数据库中使用该代码..
select * from products
where name="Mode"
我收到了错误
ERROR: column "Mode" does not exist
LINE 2: where name="Mode"
答案 1 :(得分:1)
如果有其他人在寻找,我终于在文档中找到了它。 它位于the sqlite3 FAQ
答案 2 :(得分:0)
我的熟悉程度不是sqlite3,但我会说它看起来像你在做名字=“模式”,它正在接受modes.mode对象并检查它。
如果你SELECT * FROM modes where name="Mode" order by channel
。你可能会发现它只是给你3|6|1|6|6|0|255|a|b
。