如果其他表中有相同的字段名称,获取所有数据的最佳方法是什么?

时间:2010-10-23 10:17:01

标签: mysql

我有以下数据库。

如果我选择*并加入所有表格,那么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`)
) ... ;

3 个答案:

答案 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;