sqlite为什么找不到此行?

rag*_*ius 5 sql sqlite

我正在使用sqlite3。我的测试表包含两行(请参见屏幕转储图像),但是我无法使用

SELECT * FROM test WHERE word =“ id”

声明。sqlite为什么找不到该行?

(我认为问题在于一个属性也称为“ id”,因为我发现,如果该属性id2改为命名,则select语句将起作用。)

在此处输入图片说明

zmo*_*zmo 4

这是因为双引号,使用单引号可以正常工作:

sqlite> create table test ( id integer primary key autoincrement, word text not null unique on conflict ignore );
sqlite> insert into test values (1, 'xxx');
sqlite> insert into test values (2, 'id');
sqlite> select * from test;
1|xxx
2|id
sqlite> select * from test where word = "id";
sqlite> select * from test where word = 'id';
2|id
Run Code Online (Sandbox Code Playgroud)

这是因为id是当前模式中列的名称,因为您可以在列名称周围使用双引号,sqlite 认为您正在谈论列,而不是给出字符串。IE:

sqlite> insert into test values (3, 3);
sqlite> select * from test where word = "id";
3|3
sqlite> select * from test where word = id;
3|3
Run Code Online (Sandbox Code Playgroud)

如果您可以在列上使用双引号,那是因为列名中的空格是合法的:

sqlite> create table test2 ( "foo bar" integer );
sqlite> .schema test2
CREATE TABLE test2 ( "foo bar" integer );
sqlite> insert into test2 values (42);
sqlite> select * from test2;
42
sqlite> select * from test2 where "foo bar" = 42;
42
Run Code Online (Sandbox Code Playgroud)