Имена столбцов SQLite без имени таблицы

#database #sqlite

#База данных #sqlite

Вопрос:

При запросе базы данных в SQLite я считаю полезным указывать псевдонимы таблицам, с которыми я работаю. Это также помогает разрешать конфликты именования.

 SELECT a._id, a.name, b.email FROM people AS a, emails AS b
  

Однако затем, когда я ищу столбцы «_id», «name» и «email» в моем курсоре, я получаю сообщение об ошибке, что столбцы не могут быть найдены. Это работает, только если я изменяю запрос на:

 SELECT a._id AS "_id", a.name AS "name", b.email AS "email" FROM people AS a, emails AS b
  

Есть ли способ получить имя базового столбца без дополнительной работы?

Комментарии:

1. Попробуйте создать дамп объекта, который вы получаете из базы данных.

2. Какой тип курсора? Поскольку вы не показали никакого кода, относящегося к курсору, немного сложно угадать ответы.

3. Разве ваша тема не должна быть «без имени таблицы «? (вместо имени базы данных)

4. @Damien_The_Unbeliever На самом деле это не имеет отношения к курсору. Я получаю ошибки при наведении курсора, но я также получаю ошибки, если я сохраняю одно из приведенных выше значений в виде представления и пытаюсь запросить его позже.

5. @Samuel — но первый показанный вами запрос должен сработать, и вы должны иметь возможность ссылаться на эти столбцы в любом используемом коде просто как _id , name и email . Итак, что-то не так в коде, который вы нам не показываете.

Ответ №1:

Объявление псевдонима для столбца — лучший способ избежать ошибок. Две таблицы, к которым вы запрашиваете, могут иметь одинаковые имена столбцов, и их может быть трудно отличить без псевдонимов. Единственный способ отличить их — это связать их с именами таблиц или присвоить им псевдонимы.

Псевдонимы могут упростить как запись, так и чтение запросов. Вы можете присвоить таблице или столбцу другое имя, используя псевдоним. Это может быть полезно, если у вас очень длинные или сложные имена таблиц или столбцов

Ответ №2:

Из того, что я прочитал, это, похоже, специфичная проблема SQLite.

SQLite (в настоящее время) не дает никаких обещаний относительно имен столбцов в
запросах, в которых отсутствует предложение AS. Если вы используете предложение AS, то
имя столбца гарантированно будет меткой справа от AS. Если вы
опустите предложение AS, то имена столбцов могут измениться от одной версии SQLite к следующей.

http://old.nabble.com/Aliasing-and-columns-names-td18382558.html

Я бы рекомендовал использовать псевдоним имени таблицы только для столбцов, которые конфликтуют. Например, в примере выше, если _id является единственным конфликтным столбцом, выполните:

 SELECT a._id AS _id, name, email FROM people AS a, emails