1052:字段列表中的列'id'不明确

时间:2011-07-10 01:08:14

标签: mysql sql database join mysql-error-1052

我有2张桌子。 tbl_namestbl_section,其中包含id字段。如何选择id字段,因为我总是收到此错误:

1052: Column 'id' in field list is ambiguous

这是我的疑问:

SELECT id, name, section
  FROM tbl_names, tbl_section 
 WHERE tbl_names.id = tbl_section.id

我可以选择所有字段并避免错误。但这将是对性能的浪费。我该怎么办?

8 个答案:

答案 0 :(得分:130)

SQL支持通过在引用前加上完整的表名来限定列:

SELECT tbl_names.id, tbl_section.id, name, section
  FROM tbl_names
  JOIN tbl_section ON tbl_section.id = tbl_names.id 

...或表别名:

SELECT n.id, s.id, n.name, s.section
  FROM tbl_names n
  JOIN tbl_section s ON s.id = n.id 

表别名是推荐的方法 - 为什么要输入比你更多的东西?

为什么这些查询看起来不同?

其次,我的答案使用ANSI-92 JOIN语法(你的是ANSI-89)。虽然它们执行相同的操作,但ANSI-89语法不支持OUTER连接(RIGHT,LEFT,FULL)。 ANSI-89语法应该被认为是弃用的,SO上有很多人不会投票支持ANSI-89语法来强化它。对于more information, see this question

答案 1 :(得分:15)

SELECT声明中,您需要在您的ID前面添加要从中选择的表格。

SELECT tbl_names.id, name, section 
FROM tbl_names
INNER JOIN tbl_section 
   ON tbl_names.id = tbl_section.id

OR

SELECT tbl_section.id, name, section 
FROM tbl_names
INNER JOIN tbl_section 
   ON tbl_names.id = tbl_section.id

答案 2 :(得分:6)

您可以通过提供完全限定的名称来实现,例如:

SELECT tbl_names.id as id, name, section FROM tbl_names, tbl_section WHERE tbl_names.id = tbl_section.id

哪个会给你tbl_names的id

答案 3 :(得分:3)

你真正想要做的就是使用这样的union运算符:

(select ID from Logo where AccountID = 1 and Rendered = 'True')
  union
  (select ID from Design where AccountID = 1 and Rendered = 'True')
  order by ID limit 0, 51

以下是https://dev.mysql.com/doc/refman/5.0/en/union.html

的文档

答案 4 :(得分:3)

您的问题已经有很多答案,您也可以这样做。您可以为表提供别名,并在选择查询中使用它,如下所示:

SELECT a.id, b.id, name, section
FROM tbl_names as a 
LEFT JOIN tbl_section as b ON a.id = b.id;

答案 5 :(得分:2)

最简单的解决方案是使用USING而不是ON加入。这样,数据库就会知道"这两个id列实际上都是相同的,并且不会对此进行挑剔:

SELECT id, name, section
  FROM tbl_names
  JOIN tbl_section USING (id)

如果idtbl_namestbl_section中唯一的常用列名,您甚至可以使用NATURAL JOIN

SELECT id, name, section
  FROM tbl_names
  NATURAL JOIN tbl_section

另请参阅:https://dev.mysql.com/doc/refman/5.7/en/join.html

答案 6 :(得分:0)

如果两个表中id的格式不同,那么你想加入它们,因此你可以选择使用one-main表中的id,比如你有table_customes和{{1} }和订单的ID就像“ 101 ”,“ 102 ”......“ 110 ”,只需为客户使用一个< / p>

table_orders

答案 7 :(得分:-1)

SELECT tbl_names.id, tbl_names.name, tbl_names.section
  FROM tbl_names, tbl_section 
 WHERE tbl_names.id = tbl_section.id