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

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

我可以选择所有字段,避免出现错误。但那样的表现就太浪费了。我该怎么办?

490162 次浏览

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 _ name 的 id

SQL 通过在引用前面加上完整表名称来支持对列进行限定:

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

...or a table alias:

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

表别名是推荐的方法——为什么要键入比必须键入更多的内容?

Why Do These Queries Look Different?

其次,我的答案使用 ANSI-92 JOIN 语法(您的答案是 ANSI-89)。虽然它们执行相同的操作,但 ANSI-89语法不支持 OUTER 连接(右、左、全)。ANSI-89语法应该被认为是不被推崇的,有很多在 SO 上不会投票支持 ANSI-89语法来强化这一点。对于 更多信息,请看这个问题

如果两个表中的 id 的格式不同,那么你想加入它们,因此你可以从一个主表中选择使用 id,比如说,如果你有 table_customestable_orders,而且对于订单的 id 类似于“ 101”,“ 102”... ... “ 110”,只对客户使用一个

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

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

(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

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

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

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