如何在MySQL中解决模糊的列名错误?

时间:2011-07-13 15:32:37

标签: mysql sql mysql-error-1052

  

可能重复:
  1052: Column 'id' in field list is ambiguous

我有两个表,我希望通过sb_id连接表(sb_id对于两个表是相同的)。所以,我使用了这样的查询:

SELECT Name, 
       class 
  FROM student_info,
       student_class 
 WHERE id = 1 
   AND student_info.sb_id = student_class.sb_id;

它显示错误:

  

1052:where子句中的'id'含糊不清

另一件事,我想通过使用“JOIN”来显示一个结果。

10 个答案:

答案 0 :(得分:8)

这意味着两个表都有id,您需要在其前面加上它出现的表(如果两者都相同,或者都可以)。

SELECT
  name,
  class
FROM student_info, student_class
WHERE
  student_info.id=1
  AND student_info.sb_id=student_class.sb_id;

只要一条记录包含student_info.id=1student_class记录与匹配的sb_id匹配,就会根据需要返回单个结果。结果与使用INNER JOIN的结果相同 - 换句话说,两个记录必须存在并连接在一起。

相应的INNER JOIN语法如下所示:

SELECT
  name,
  class,
FROM student_info
INNER JOIN student_class ON student_info.sb_id = student_class.sb_id
WHERE student_info.id = 1

答案 1 :(得分:1)

问题在于您的WHERE声明,您需要使用:

where student_info.id=1

或:

where student_class.id=1

答案 2 :(得分:0)

SELECT Name,class 
FROM student_info,student_class 
WHERE student_info.sb_id=1 AND student_info.sb_id=student_class.sb_id;

答案 3 :(得分:0)

从student_info中选择a.Name,a.class作为b的连接student_class 在a.sb_id = b.sb_id上  其中id = 1;

答案 4 :(得分:0)

您的where id=1应该where student_info.sb_id = 1吗?

您可以将其更改为这样的联接:

SELECT Name,class FROM student_info INNER JOIN student_class ON student_info.sb_id = student_class.sb_id WHERE student_info.sb_id=1

答案 5 :(得分:0)

SELECT Name,class from student_info join student_class on student_info.sb_id=student_class.sb_id where student_info.id=1;

答案 6 :(得分:0)

SELECT student_info.Name,student_info.class from student_info inner join student_class on student_info.sb_id=student_class.sb_id where student_info.id=1;

答案 7 :(得分:0)

这意味着两列中都存在id列,只需将student_info.id或student_class.id替换为id

答案 8 :(得分:0)

使用表名在where子句中添加ID列。它很混乱,因为ID在两个表中,并且它不知道你的意思。

WHERE student_info.id=1

WHERE student_class.id=1

取决于您在编写查询时的意思。

答案 9 :(得分:0)

这是因为你的两个表都有id字段,所以你需要指定你想要使用哪个id(你可能会也可能不会使用表别名,我更喜欢使用它,但它确实是由你决定)。此外,使用JOIN加入表格比将所有内容放入FROM要好得多。我将您的查询重写为

SELECT Name,class 
from student_info si
INNER JOIN student_class sc ON (sc.sb_id = si.sb_id)
WHERE si.id = 1  // or sc.id =1, whatever makes sense