我有以下数据库。
如果我选择*并加入所有表格,那么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`)
) ... ;
答案 0 :(得分:1)
如果字段名称不明确,使用tablename.fieldname
是我所知道的唯一方法。
您可以为表名创建短别名:
... FROM omc_courses AS c
然后通过该别名解决字段名称:
select *, c.desc AS course_desc, t.desc AS trainer_desc, ....
但我认为这是缩写方面最好的。
答案 1 :(得分:0)
最好的方法是你建议使用别名来消除不同表中相同列名之间的歧义。
据我所知,我认为没有任何其他方法可以避免相同列名的含糊不清。
例如:with aliases -
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
答案 2 :(得分:0)
按照建议使用列别名,但我可能会创建一个如下视图,所以我不必再考虑一下:
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;