простой запрос соединения работает на локальном хосте, но не на сервере? - PullRequest
0 голосов
/ 19 декабря 2010

Следующий запрос хорошо работает на локальном хосте и возвращает строки, но когда он выполняется на сервере, он возвращает ошибку ...

Показана ошибка

#1054 - Unknown column 'hc.id' in 'on clause'

В чем проблема?

select 
hd.holiday_id,h.same_date, h.holiday, hd.date 
from holiday_dates as hd 
join holidays as h on hd.holiday_id=hc.id 
join holiday_countries as hc on hc.holiday_id=h.id and hc.country_id=c.id 
join countries as c 
where 
c.name='india' and hd.year='2010'

Моя структура таблицы страны

'id', 'int(11)', '', 'PRI', '', 'auto_increment'
'name', 'varchar(80)', 'YES', '', '', ''

праздники

'id', 'int(11)', '', 'PRI', '', 'auto_increment'
'holiday', 'varchar(90)', 'YES', '', '', ''
'same_date', 'tinyint(1)', 'YES', '', '', ''
'religions', 'varchar(50)', '', '', '', ''
'season', 'enum('Winter','Spring','Summer','Autumn')', '', '', 'Winter', ''
'rate', 'int(2)', '', '', '0', ''

holiday_countries

'id', 'int(11)', '', 'PRI', '', 'auto_increment'
'holiday_id', 'int(11)', '', '', '0', ''
'country_id', 'int(11)', '', '', '0', ''
'link', 'varchar(40)', '', '', '', ''

holiday_dates

'holiday_id', 'int(11)', 'YES', 'MUL', '', '' //  this refers to the holiday_id from holiday_countries table
'year', 'varchar(4)', 'YES', '', '', ''
'date', 'date', '', '', '0000-00-00', ''

1 Ответ

1 голос
/ 19 декабря 2010

Порядок, в котором у вас есть ваши объединения, испорчен, похоже, что это была опечатка в конце моей 6-й строки

    select hd.holiday_id
         , h.same_date
         , h.holiday
         , hd.date 
      from holiday_dates as hd 
      join holidays as h on hd.holiday_id = h.id 
      join holiday_countries as hc on hc.holiday_id = h.id 
      join countries as c on hc.country_id = c.id 
     where c.name='india'
       and hd.year='2010'

Исправлено, пропущено и c.id в конце строки 7

Немного больше информации для вас: Эти ошибки генерируются из-за того, что вы ссылаетесь на поля в таблице, которые еще не были объединены и для которых был создан псевдоним.

так что вернитесь к исходному запросу:

    select hd.holiday_id
         , h.same_date
         , h.holiday
         , hd.date 
      from holiday_dates as hd
      join holidays as h on hd.holiday_id=hc.id
      join holiday_countries as hc on hc.holiday_id=h.id and hc.country_id=c.id 
      join countries as c 
     where c.name='india'
       and hd.year='2010'

Ваша первоначальная ошибка была в том, что вы ссылаетесь на таблицу hc в строке 6, но присоединяетесь к ней и делаете псевдоним в строке 7. Вторая ошибка была в том, что вы ссылаетесь на таблицу c в строке 7, но присоединяетесь и создаете псевдоним в строке 8.

Edit:

Это не имеет большого логического смысла для меня без структуры таблицы, но попробуйте это:

   select hd.holiday_id
         , h.same_date
         , h.holiday
         , hd.date 
      from holidays as h
      join holiday_countries as hc on hc.holiday_id = h.id 
      join holiday_dates as hd on hd.holiday_id = hc.id 
      join countries as c on hc.country_id = c.id 
     where c.name='india'
       and hd.year='2010'

Наслаждайтесь

...