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

wz3gfoph  于 2023-06-21  发布在  Mysql
关注(0)|答案(8)|浏览(197)

我有两张table。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

我可以选择所有字段并避免错误。但这在性能上是一种浪费。我该怎么办?

a64a0gku

a64a0gku1#

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

fruv7luv

fruv7luv2#

在你的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
guz6ccqo

guz6ccqo3#

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

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

这将为您提供tbl_names的id

abithluo

abithluo4#

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

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

pcww981p5#

最简单的解决方案是使用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

eimct9ow

eimct9ow6#

你可能真正想做的是像这样使用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

zi8p0yeb

zi8p0yeb7#

如果两个表中的id的格式不同,那么您希望将它们连接起来,因此您可以选择使用一个主表中的id,例如,如果您有table_customestable_orders,并且订单的id如“101”,“102”...“110”,则只需为客户使用一个

select customers.id, name, amount, date from customers.orders;
u5rb5r59

u5rb5r598#

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

相关问题