我有下面的数据库。
如果我选择*并连接所有的表,desc和active将会混淆。
现在我可以写所有像omc_courses.desc,omc_trainer.desc等,但如果我有很多字段,这是不实用的。
所以我在想,我是否可以为同名的字段编写类似select *, omc_courses.desc AS course_desc, omc_trainer.desc AS trainer_desc,等的代码。
或者你有什么建议吗?
提前谢谢。
CREATE TABLE IF NOT EXISTS `omc_courses` (
`id` int(11) NOT NULL AUTO_INCREMENT,
...
`desc` varchar(255) DEFAULT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1',
...
PRIMARY KEY (`id`)
) ... ;
CREATE TABLE IF NOT EXISTS `omc_trainer` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
...
`desc` varchar(255) DEFAULT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1',
...
PRIMARY KEY (`id`)
) ... ;
CREATE TABLE IF NOT EXISTS `omc_anothertable` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
...
`desc` varchar(255) DEFAULT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1',
...
PRIMARY KEY (`id`)
) ... ;发布于 2010-10-23 18:23:24
如果字段名不明确,就我所知,使用tablename.fieldname是唯一的方法。
您可以为表名创建简短的别名:
... FROM omc_courses AS c然后通过该别名对字段名进行寻址:
select *, c.desc AS course_desc, t.desc AS trainer_desc, ....但我认为在缩写方面这是最好的。
发布于 2010-10-23 18:23:20
当然,最好的方法是如您所建议的那样,使用别名消除不同表中相同列名之间的歧义。
据我所知,我认为没有其他方法可以避免相同列名的这种歧义。
例如:使用别名-
select omc_c.*, omc_c.desc AS course_desc, omc_t.desc AS trainer_desc
from omc_courses as omc_c inner join omc_trainer as omc_t发布于 2010-10-23 18:35:37
按照建议使用列别名,但我可能会创建一个视图,如下所示,这样我就不必再考虑它了:
drop view if exists omc_courses_view;
create view omc_courses_view as
select
c.id as course_id,
c.active as course_active,
t.id as trainer_id,
t.active as trainer_active,
...
from
omc_courses c
inner join omc_trainer t on c.id = t.course_id
inner join ...
select * from omc_courses_view;https://stackoverflow.com/questions/4003485
复制相似问题