合并具有相同名称的2列的结果,而不是覆盖其中一列

时间:2010-07-28 23:33:08

标签: sql mysql

我有一个简单的MySQL查询,如:

SELECT * 
  FROM `content_category` CC , `content_item` CI 
 WHERE CI.content_id = '" . (int)$contentId . "'
   AND CI.category_id = CC.category_id
   AND CI.active  = 1

两个表都有一个名为configuration的列,其中一个列在查询中被覆盖,结果只返回content_item.configuration。

没有像

那样隐式命名和别名列
SELECT CC.configuration as `category_configuration`,
       CC.category_id as `.....

有没有办法从两者中选择所有数据,即*,并以非破坏性方式解析这些重复的列名。

2 个答案:

答案 0 :(得分:2)

您不需要为所有列添加别名,只需要一个冲突的列:

SELECT *,CC.configuration as cc_conf, CI.configuration as ci_conf FROM `content_category` CC , `content_item` CI WHERE
CI.content_id = '" . (int)$contentId . "'
AND CI.category_id = CC.category_id
AND CI.active  = 1

答案 1 :(得分:1)

这表明使用*通配符并不是一个好习惯的众多原因之一。所有列都在结果集中返回,但是如果通过关联数组或通过宿主语言中的对象(例如PHP或Ruby)访问它们,则自然只能有一个与每个键或对象属性相关联的列。

解决方案:

  • 全部获取并按顺序位置引用列。

  • 停止对一个表或另一个表使用通配符,并为列别名提供。

  • 将列重命名为不同。

  • 定义一个包含列别名拼写的VIEW,并从视图中查询。