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