我有两张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条答案
按热度按时间aelbi1ox1#
如果两个表中的id的格式不同,那么您希望将它们连接起来,因此您可以选择使用一个主表中的id,比如说如果您有
table_customes
以及table_orders
,订单的id是“101”、“102”…“110”,客户只需使用一个ivqmmu1c2#
最简单的解决方案是使用
USING
而不是ON
. 这样,数据库就“知道”了id
列实际上是相同的,不会挑剔:如果
id
是中唯一的常用列名tbl_names
以及tbl_section
,你甚至可以使用NATURAL JOIN
:另请参见:https://dev.mysql.com/doc/refman/5.7/en/join.html
tkclm6bt3#
您可以提供一个完全限定的名称,例如:
它会给你tbl\U名字的id
ds97pgxw4#
你的问题已经有很多答案了,你也可以这样做。您可以为表指定一个别名,并在select查询中使用该别名,如下所示:
qybjjes15#
在这里,您可能真正想做的是像这样使用并集运算符:
这是它的文件https://dev.mysql.com/doc/refman/5.0/en/union.html
t40tm48m6#
sql支持通过在引用前面加上完整表名来限定列:
…或表别名:
表别名是推荐的方法--为什么键入的内容比必须的多?
为什么这些查询看起来不同?
其次,我的答案使用ansi-92连接语法(你的是ansi-89)。虽然它们执行相同的操作,但ansi-89语法不支持外部联接(right、left、full)。ansi-89语法应该被认为是不赞成的,有很多人因此不会投票支持ansi-89语法来加强这一点。有关更多信息,请参阅此问题。
57hvy0tb7#
mw3dktmi8#
在你的
SELECT
声明您需要在您的id前面加上您要从中选择的表。或