我正在创建一个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。
答案 0 :(得分:1)
不要选择星标,单独选择列并根据需要指定别名。
答案 1 :(得分:0)
不,您不能依赖视图重命名列以避免冲突。我没有标准方便的副本,所以我不能引用章节和经文,但我知道PostgreSQL会这样说:
ERROR: column "_id" specified more than once
并且MySQL会这样说:
ERROR 1060 (42S21): Duplicate column name '_id'
这些是我目前唯一方便的数据库。