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

我有2桌子。 tbl_namestbl_section ,它们都有id字段。 我如何去selectid字段,因为我总是得到这个错误:

 1052: Column 'id' in field list is ambiguous 

这是我的查询:

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

我可以select所有的字段,并避免错误。 但是,这将是一个浪费的performance。 我该怎么办?

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语法不支持外部连接(右,左,满)。 应该考虑使用ANSI-89语法,因此有许多人不会投票支持ANSI-89语法来加强这一点。 有关更多信息,请参阅此问题 。

在你的SELECT语句中,你需要在你想从中select表的前面加上你的id。

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

要么

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

你可以通过提供一个完全合格的名字来实现,例如:

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

哪个会给你tbl_names的ID

已经有很多你的问题的答案,你也可以这样做。 你可以给你的表一个别名,并在select查询中使用它,如下所示:

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

你可能真的想在这里做的是使用这样的联合运算符:

 (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

如果两个表中的id的格式不同,那么你想join它们,因此你可以select使用一个主表中的id,比如说你有table_customestable_orders ,而且这个id是101 “,” 102 “…” 110 “,只是给客户使用

 select customers.id, name, amount, date from customers.orders; 
 SELECT tbl_names.id, tbl_names.name, tbl_names.section FROM tbl_names, tbl_section WHERE tbl_names.id = tbl_section.id