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と1対多の関係にあります。通常、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 に答える