在SQL查询中加入会给出列ambigios错误

时间:2014-12-13 12:14:06

标签: mysql

表格名称 - 城市

-city_id,city_name

表格 - 州

-state_id,state_name

表名 - 类别

列名 - category_id,category_name

表格名称 - 新闻

列名称 - cat_id,state_id,city_id,标题,故事,作者等。

我想从城市,州和类别表中选择所有列,以便在新闻表中插入ID ....

为此我创建了sql查询并加入了以上三个表,但这显示错误..plz帮助我......

字段列表中的列'state_id'不明确

字段列表中的列'city_id'不明确

字段列表中的列'category_id'不明确

我需要从城市,州和类别表中返回所有列

SELECT city_name,city_id,state_id,category_id,state_name,category_name,headline,author,story,source,photo,date from news left join
 city on news.city_id=city.city_id left join state on news.state_id=state.state_id left join category on news.cat_id=category.category_id;

2 个答案:

答案 0 :(得分:1)

您需要指定列来自的表。 city_id列表中的select含糊不清。我认为这是正确的别名:

SELECT c.city_name, c.city_id, s.state_id, ca.category_id, s.state_name, ca.category_name,
       n.headline, n.author, n.story, n.source, n.photo, n.date
from news n left join
     city c
     on n.city_id= c.city_id left join
     state s
     on n.state_id = s.state_id left join
     category ca
     on n.cat_id = ca.category_id;

请注意,我引入了表别名。这些有助于使查询更容易编写和阅读。

答案 1 :(得分:0)

同样的原因是,你在状态和新闻表中都有state_id(对于city和news表中的city_id也是如此),名称很少,而且SQL引擎混淆了哪一个使用。因此,我建议您在选择字段中使用表别名或表名作为前缀。