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

Wer*_*eta 80 mysql sql database join mysql-error-1052

我有2张桌子.tbl_names并且tbl_section其中包含两个id领域.我如何选择该id字段,因为我总是收到此错误:

1052: Column 'id' in field list is ambiguous
Run Code Online (Sandbox Code Playgroud)

这是我的查询:

SELECT id, name, section
  FROM tbl_names, tbl_section 
 WHERE tbl_names.id = tbl_section.id
Run Code Online (Sandbox Code Playgroud)

我可以选择所有字段并避免错误.但这将是对性能的浪费.我该怎么办?

OMG*_*ies 137

SQL支持通过在引用前加上完整的表名来限定列:

SELECT tbl_names.id, tbl_section.id, name, section
  FROM tbl_names
  JOIN tbl_section ON tbl_section.id = tbl_names.id 
Run Code Online (Sandbox Code Playgroud)

...或表别名:

SELECT n.id, s.id, n.name, s.section
  FROM tbl_names n
  JOIN tbl_section s ON s.id = n.id 
Run Code Online (Sandbox Code Playgroud)

表别名是推荐的方法 - 为什么输入比你需要更多?

为什么这些查询看起来不同?

其次,我的答案使用ANSI-92 JOIN语法(你的是ANSI-89).虽然它们执行相同的操作,但ANSI-89语法不支持OUTER连接(RIGHT,LEFT,FULL).ANSI-89语法应该被认为是弃用的,SO上有很多人不会投票支持ANSI-89语法来强化它.有关更多信息,请参阅此问题.


Tar*_*ryn 15

在您的SELECT陈述中,您需要在id中添加要从中选择的表.

SELECT tbl_names.id, name, section 
FROM tbl_names
INNER JOIN tbl_section 
   ON tbl_names.id = tbl_section.id
Run Code Online (Sandbox Code Playgroud)

要么

SELECT tbl_section.id, name, section 
FROM tbl_names
INNER JOIN tbl_section 
   ON tbl_names.id = tbl_section.id
Run Code Online (Sandbox Code Playgroud)


M.J*_*M.J 8

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

SELECT a.id, b.id, name, section
FROM tbl_names as a 
LEFT JOIN tbl_section as b ON a.id = b.id;
Run Code Online (Sandbox Code Playgroud)


hal*_*dan 6

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

SELECT tbl_names.id as id, name, section FROM tbl_names, tbl_section WHERE tbl_names.id = tbl_section.id
Run Code Online (Sandbox Code Playgroud)

哪个会给你tbl_names的id


vog*_*vog 6

最简单的解决方案是连接 withUSING而不是ON。这样,数据库“知道”两id列实际上是相同的,并且不会对此挑剔:

SELECT id, name, section
  FROM tbl_names
  JOIN tbl_section USING (id)
Run Code Online (Sandbox Code Playgroud)

如果是和id中唯一常见的列名,您甚至可以使用:tbl_namestbl_sectionNATURAL JOIN

SELECT id, name, section
  FROM tbl_names
  NATURAL JOIN tbl_section
Run Code Online (Sandbox Code Playgroud)

另请参阅: https: //dev.mysql.com/doc/refman/5.7/en/join.html


Bry*_*end 5

您可能真正想做的是使用联合运算符,如下所示:

(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
Run Code Online (Sandbox Code Playgroud)

这是它的文档https://dev.mysql.com/doc/refman/5.0/en/union.html