2013-07-21 4 views
1

Это является оператор выбора MySQL У меня есть, что дает мне ошибку - Неизвестный столбец «Regattas.regatta_id» в «по статье»MySQL выберите оператор дает ошибку

SELECT 
     Regattas.regatta_id, 
     Events.event_id, 
     Events.event_name 
     FROM Regattas, Events 
     LEFT JOIN Regatta_Events AS Regatta_Events_1 ON Regatta_Events_1.fk_event_id = Events.event_id 
     LEFT JOIN Regatta_Events AS Regatta_Events_2 ON Regatta_Events_2.fk_regatta_id = Regattas.regatta_id 
     WHERE Regattas.regatta_id = {$regattaId} 

Компоновка таблиц, как ниже :

Регаты Таблица:

+--------------------+--------------+------+-----+---------+----------------+ 
| Field    | Type   | Null | Key | Default | Extra   | 
+--------------------+--------------+------+-----+---------+----------------+ 
| regatta_id   | int(11)  | NO | PRI | NULL | auto_increment | 
| regatta_name  | varchar(100) | NO |  | NULL |    | 
| regatta_start_date | date   | NO |  | NULL |    | 
| regatta_end_date | date   | NO |  | NULL |    | 
| regatta_start_time | time   | NO |  | NULL |    | 
| regatta_venue_id | int(11)  | NO |  | 0  |    | 
+--------------------+--------------+------+-----+---------+----------------+ 

события Таблица:

+------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+------------+--------------+------+-----+---------+----------------+ 
| event_id | int(11)  | NO | PRI | NULL | auto_increment | 
| event_name | varchar(255) | NO |  | NULL |    | 
+------------+--------------+------+-----+---------+----------------+ 

И Regatta_Events стол, как это - Conjunction стол:

+-------------------+---------+------+-----+---------+----------------+ 
| Field    | Type | Null | Key | Default | Extra   | 
+-------------------+---------+------+-----+---------+----------------+ 
| regatta_events_id | int(11) | NO | PRI | NULL | auto_increment | 
| fk_regatta_id  | int(11) | NO |  | 0  |    | 
| fk_event_id  | int(11) | NO |  | 0  |    | 
+-------------------+---------+------+-----+---------+----------------+ 

Пожалуйста, помогите мне исправить это я был на нем некоторое время.

+0

Вы смешиваете синтаксис соединения в одном утверждении; более старые таблицы, разделенные запятыми, а также более новый синтаксис с синтаксисом 'JOIN ON'. Я предлагаю стандартизировать это. Где ваше соединение между «Регатами» и «Событиями»? – Wolf

+0

Где соединение между «регатами» и «событиями»? Когда это исправлено, возможно, другая ошибка исчезнет. –

ответ

1

Предполагая, что это то, что вы пытаетесь сделать, вы можете использовать для этого UNION ALL. Вам не нужно OUTER JOIN с первого запроса - я оставил его только для справки (не 100% положительных, что вы пытаетесь достичь):

SELECT 
     Regattas.regatta_id, 
     NULL event_id, 
     NULL event_name 
FROM Regattas 
     LEFT JOIN Regatta_Events ON Regatta_Events.fk_regatta_id = Regattas.regatta_id 
WHERE Regattas.regatta_id = {$regattaId} 
UNION ALL 
SELECT 
     NULL regatta_id, 
     Events.event_id, 
     Events.event_name 
FROM Events 
     LEFT JOIN Regatta_Events ON Regatta_Events.fk_event_id = Events.event_id 

Я не совсем уверен, что я понимаю ваш желаемый Результаты. Это вернет все результаты из таблицы Events и только те результаты из таблицы Regattas, где идентификатор совпадает со входом.

Возможно, вместо этого вы ищете что-то вроде этого:

SELECT 
    Regattas.regatta_id, 
    Events.event_id, 
    Events.event_name 
FROM Regattas 
    LEFT JOIN Regatta_Events ON Regatta_Events.fk_regatta_id=Regattas.regatta_id 
    LEFT JOIN Events ON Regatta_Events.fk_event_id=Events.event_id 
WHERE Regattas.regatta_id = {$regattaId} 
+0

Что такое NULL event_id, NULL event_name – Programit

+1

@Programit - зависит от ваших желаемых результатов. Если вы хотите получить все результаты, оператор 'UNION' требует, чтобы из каждого запроса возвращалось одинаковое количество столбцов. Попробуйте последний запрос и убедитесь, что это не то, что вы ищете. – user2480596

+0

Большое спасибо за то, что я хотел. – Programit

0

Я думаю, что это должно быть просто присоединиться к вам вернуться Regetta_id, event_id и event_name комбинацию.

SELECT 
     Regattas.regatta_id, 
     Events.event_id, 
     Events.event_name 
     FROM Regattas as rg 
     LEFT JOIN Regatta_Events as re ON re.fk_event_id = rg.regatta_id 
     LEFT JOIN Events AS ev ON re.fk_regatta_id = ev.event_id 
     WHERE rg.regatta_id = {$regattaId} 
Смежные вопросы