mysql内连接不明确的USING()字段但并非总是如此

时间:2011-08-25 10:12:13

标签: mysql join ambiguous

我最近更换了服务器,虽然我显然仍在使用MySQL,但我不认为它是相同的版本或设置方式与我以前相同。

最明显的效果是我的JOIN查询,实际上一些使用INNER JOIN的查询会抛出暧昧的列错误,在我的上一台服务器上,我确信代码没问题。

table1
t1_id int primary key
name text

map
t1_id int 
t2_id int 

table2
t2_id int primary key
name text

table1与table2有一对多的关系。 通常,要从table1及其所有table2条目中获取一行,我会执行以下操作:

SELECT * FROM table1 
INNER JOIN map USING(t1_id) 
INNER JOIN table2 USING(t2_id) 
WHERE table1.t1_id=1;

然而,这每次都会引发一个暧昧的列错误。解决这个问题的唯一方法是使用

SELECT * FROM table1 
INNER JOIN map ON(table1.t1_id=map.t1_id) 
INNER JOIN table2 ON(map.t2_id=table2.t2_id)
WHERE table1.t1_id=1;

除了版本5.1.56-community-log之外,我没有太多关于服务器配置的信息,我相信它正在运行Linux(可能是Debian)。

这是我的查询问题还是与我们使用的MySQL版本有关?

2 个答案:

答案 0 :(得分:0)

您是否尝试过以下操作:

SELECT table1.t1_id, table1.name FROM table1 
INNER JOIN map USING(t1_id) 
INNER JOIN table2 USING(t2_id) 
WHERE table1.t1_id=1;

答案 1 :(得分:0)

您可以从任何表中获取所需的任何列,只需别名(临时重命名)具有相同名称的列:

SELECT table1.t1_id
     , table1.name   AS t1_name
     , table2.t2_id  
     , table2.name   AS t2_name
FROM table1 
  INNER JOIN map USING(t1_id) 
  INNER JOIN table2 USING(t2_id) 
WHERE table1.t1_id=1;