0

我最近更换了服务器,虽然我显然仍在使用 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 版本有关?

4

2 回答 2

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;
于 2011-08-25T10:16:53.620 回答
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;
于 2011-08-25T11:38:46.947 回答