SQLite可以防止我的VIEW中出现重复的列名

时间:2011-09-21 01:18:30

标签: android sqlite

我正在创建一个SQLite VIEW,它是多个连接表的结果。根据Android的要求,我的所有表都有一个_id列。结果有多个列具有相同的_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 个答案:

答案 0 :(得分:1)

不要选择星标,单独选择列并根据需要指定别名。

答案 1 :(得分:0)

不,您不能依赖视图重命名列以避免冲突。我没有标准方便的副本,所以我不能引用章节和经文,但我知道PostgreSQL会这样说:

ERROR:  column "_id" specified more than once

并且MySQL会这样说:

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

这些是我目前唯一方便的数据库。