我有一个简单的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 `.....
有没有办法从两者中选择所有数据,即*,并以非破坏性方式解析这些重复的列名。
答案 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,并从视图中查询。