我有两张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
我可以选择所有字段并避免错误。但这在性能上是一种浪费。我该怎么办?
8条答案
按热度按时间a64a0gku1#
SQL支持通过在引用前加上完整的表名来限定列:
...或表别名:
表别名是推荐的方法--为什么要键入比您必须键入的更多的内容呢?
为什么这些查询看起来不一样?
其次,我的答案使用ANSI-92 JOIN语法(你的是ANSI-89)。虽然它们执行相同的操作,但ANSI-89语法不支持OUTER连接(RIGHT、LEFT、FULL)。ANSI-89语法应该被认为是过时的,有很多SO上的人不会投票支持ANSI-89语法来加强这一点。对于more information, see this question。
fruv7luv2#
在你的
SELECT
语句中,你需要在你的id前面加上你想要从中选择的表。或
guz6ccqo3#
您可以通过提供完全限定的名称来实现这一点,例如:
这将为您提供tbl_names的id
abithluo4#
已经有很多答案你的问题,你可以这样做也.你可以给予你的表一个别名,并在select查询中使用它,如下所示:
pcww981p5#
最简单的解决方案是使用
USING
而不是ON
进行连接。这样,数据库“知道”两个id
列实际上是相同的,并且不会挑剔:如果
id
是tbl_names
和tbl_section
中唯一通用的列名,您甚至可以使用NATURAL JOIN
:标签:https://dev.mysql.com/doc/refman/5.7/en/join.html
eimct9ow6#
你可能真正想做的是像这样使用union操作符:
这是它的文档https://dev.mysql.com/doc/refman/5.0/en/union.html
zi8p0yeb7#
如果两个表中的id的格式不同,那么您希望将它们连接起来,因此您可以选择使用一个主表中的id,例如,如果您有
table_customes
和table_orders
,并且订单的id如“101”,“102”...“110”,则只需为客户使用一个u5rb5r598#