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

k5ifujac  于 2021-06-24  发布在  Mysql
关注(0)|答案(8)|浏览(349)

我有两张table。 tbl_names 以及 tbl_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

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

aelbi1ox

aelbi1ox1#

如果两个表中的id的格式不同,那么您希望将它们连接起来,因此您可以选择使用一个主表中的id,比如说如果您有 table_customes 以及 table_orders ,订单的id是“101”、“102”…“110”,客户只需使用一个

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

ivqmmu1c2#

最简单的解决方案是使用 USING 而不是 ON . 这样,数据库就“知道”了 id 列实际上是相同的,不会挑剔:

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

如果 id 是中唯一的常用列名 tbl_names 以及 tbl_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

tkclm6bt

tkclm6bt3#

您可以提供一个完全限定的名称,例如:

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

它会给你tbl\U名字的id

ds97pgxw

ds97pgxw4#

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

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

qybjjes15#

在这里,您可能真正想做的是像这样使用并集运算符:

(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

t40tm48m

t40tm48m6#

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连接语法(你的是ansi-89)。虽然它们执行相同的操作,但ansi-89语法不支持外部联接(right、left、full)。ansi-89语法应该被认为是不赞成的,有很多人因此不会投票支持ansi-89语法来加强这一点。有关更多信息,请参阅此问题。

57hvy0tb

57hvy0tb7#

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

mw3dktmi8#

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

相关问题