2011-08-25 70 views
0

我最近更换了服务器,尽管我仍然明显使用MySQL,但我不认为它是相同版本或以与我相同的方式设置习惯于。mysql内部连接ambigious USING()字段,但并不总是

最显着的影响是我的JOIN查询,实质上一些使用INNER JOIN的查询在我的最后一个服务器上抛出ambigious列错误,我确信代码会好的。

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有一对多的关系。 通常情况下,为了从表1和表2的所有条目的行,我会做这样的事情:

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

然而,这将引发每次ambigious列错误。这一轮的唯一方法就是使用

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; 

没有太多我可以告诉你服务器的配置除了版本,56年5月1日 - 社区登录,我相信这正在运行的Linux(Debian的可能)。

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

回答

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; 
+0

尝试这样做,有用。我最初的查询直到最近才被破解......我将它标记为已接受,因为虽然这并未实际解决任何问题,但我无法重现我之前看到的错误,因此无论是出现人为错误还是某人不见了并在解决此问题时修复了服务器。无论如何,尽管我应该指出,只从两个表中获取数据并不是很有用 – jammypeach

0

您可以得到任何coulmn您从任何表格,只是别名想那些具有相同的名称(临时命名):

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;