mysql inner join неоднозначное поле USING (), но не всегда - PullRequest
0 голосов
/ 25 августа 2011

Я недавно сменил серверы и, хотя я все еще использую 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 имеет один ко многимотношения с таблицей2.Обычно, чтобы получить строку из таблицы 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 голосов
/ 25 августа 2011

Вы можете получить любой желаемый кулон из любой таблицы, только псевдоним (временное переименование) с теми же именами:

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;
0 голосов
/ 25 августа 2011

Вы пробовали следующее:

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;
...