SQLite предотвращает дублирование имен столбцов в моем VIEW - PullRequest
0 голосов
/ 21 сентября 2011

Я создаю SQLite VIEW, который является результатом нескольких объединенных таблиц.Все мои таблицы имеют столбец _id, как того требует Android.У результата есть несколько столбцов с одинаковым именем _id, но SQLite добавляет «: 1» и «: 2» ​​к повторяющимся именам, чтобы они больше не были дубликатами.

Если вы запустите приведенный ниже SQL, вы увидитеПолученное представление имеет интересные имена столбцов:

CREATE TABLE things ("_id" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE , "name" TEXT NOT NULL);

CREATE TABLE thing_colors ("_id" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE , "thing_id" INTEGER NOT NULL , "color" TEXT NOT NULL);

INSERT INTO things VALUES ("1","car");
INSERT INTO things VALUES ("2","horse");
INSERT INTO things VALUES ("3","lamp");

INSERT INTO thing_colors VALUES ("1","1","blue");
INSERT INTO thing_colors VALUES ("2","1","red");
INSERT INTO thing_colors VALUES ("3","2","brown");
INSERT INTO thing_colors VALUES ("4","3","silver");
INSERT INTO thing_colors VALUES ("5","3","gold");

CREATE VIEW things_and_colors AS SELECT * FROM things JOIN thing_colors ON things._id=thing_colors.thing_id;

SELECT * FROM things_and_colors;

Я считаю эти переименованные имена столбцов полезными, но разве это нормальное поведение SQL и можно ли на него полагаться?

Но, конечно, это всего лишь пример, в реальной жизни я объединяю три таблицы, и в результате получается около 70 столбцов, из которых 3 названы _id.

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

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

0 голосов
/ 21 сентября 2011

Нет, вы не можете зависеть от представления переименования ваших столбцов, чтобы избежать конфликтов. У меня нет удобного экземпляра стандарта, поэтому я не могу цитировать главу и стих, но я знаю, что PostgreSQL скажет следующее:

ERROR:  column "_id" specified more than once

и MySQL скажет так:

ERROR 1060 (42S21): Duplicate column name '_id'

Это единственные базы данных, которые у меня есть на данный момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...