提问者:小点点

sql查询中的联接给出了列模糊错误


表名-城市

列-城市标识、城市名称

表状态

列-状态id、状态名称

表名-类别

列名-category_id,category_name

表名-新闻

列名-类别id、州id、城市id、标题、故事、作者等。。

我需要从城市、州和类别表中选择所有列,以便在新闻表中插入id。。。。

为此,我创建了sql查询并连接了上述三个表,但这显示了错误。。请帮我。。。

字段列表中的“state\u id”列不明确

字段列表中的“城市id”列不明确

字段列表中的列category_id不明确

我需要返回city、state和category表中的所有列

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

匿名用户

您需要指定列来自的表<代码>城市id在选择列表中不明确。我认为这是正确的别名:

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;

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

匿名用户

原因是,state和news表中都有state_id(city_id与news表中的city_id相同),而SQL引擎不知道使用哪一个。因此,我建议您在选择字段中使用表别名或表名称作为前缀。