Почему sqlite не может найти эту строку?

4

Я использую sqlite3. Моя тестовая таблица содержит две строки (см. Изображение дампа экрана), но я не могу найти вторую строку с помощью

SELECT * FROM test WHERE word = "id"

утверждение. Почему sqlite не может найти эту строку?

(Я думаю, проблема заключается в том, что один атрибут также называется "id", потому что я обнаружил, что оператор select будет работать, если этот атрибут, где с именем id2.)

Изображение 10065

  • 0
    Нам легче помочь вам, если вы копируете / вставляете вместо того, чтобы делать скриншот ;-)
  • 0
    Хорошо, в следующий раз я это сделаю. Еще раз спасибо!
Теги:
sqlite3

1 ответ

3
Лучший ответ

это из-за двойных кавычек, используя одинарные кавычки, будет хорошо работать:

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

и это потому, что id - это имя столбца в вашей текущей схеме, так как вы можете использовать двойные кавычки вокруг имен столбцов, sqlite думает, что вы говорите о столбцах, а не о строке. то есть:.

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

если вы можете использовать двойные кавычки в столбцах, потому что пробелы являются законными в именах столбцов:

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
  • 0
    Хорошо, это работает! Спасибо!
  • 0
    потому что одинарные кавычки - это то, что используется в языке для определения строки! С двойными кавычками sqlite3 сначала будет искать имена в таблице, а только потом будет рассматривать ее как строку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню