SQL: Проблема при связи двух таблиц

Компьютеры программирование MySQL базы данных sql

Проблема в следующем: есть две таблицы - "Команды" и "Календарь" (список соревнований, в котором указаны две противоборствующие команды).

В таблице "Календарь" есть поля 1st_team_id и 2nd_team_id, и оба они принимают значения name таблицы "Команды" (team).

Делаю запрос:
SELECT calendar.id, calendar.date, team.name, team.name, calendar.judge, calendar.result FROM calendar, team WHERE calendar.1st_team_id = team.id AND calendar.2nd_team_id = team.id;

Если убрать слово AND и всё что идёт за ним, то запрос выполнится, но два столюца таблицы "Календарь" - 1st_team_id и 2nd_team_id примут одинаковые значения. Иначе запрос не выполняется :(

Подскажите, пожалуйста, как можно решить эту проблему?

Примечание:
Дело в том, что у меня должна быть одна таблица, включающая полный список команд и информацию о них

Примечание:
Решил проблему следующим образом:
SELECT calendar.id, calendar.date, team1.name, team2.name, calendar.judge, calendar.result FROM calendar LEFT JOIN team AS team1 ON (team1.id = calendar.1st_team_id) LEFT JOIN team AS team2 ON (team2.id = calendar.2nd_team_id)
Ответы:
Смысл в том, что Вы выбираете из трёх таблиц: Календарь, ПервыеКоманды, ВторыеКоманды. То, что вторая и третья таблица представлены одной и той же таблицей БД, лишь незначительная деталь.
Что значит "не выполняется"? Ошибка или пустой результат.
Если пустой результат, то вполне логично:
Коллега , смотрите - две одинаковые команды в такой таблице в одной строке быть не могут. В матче принимают участие как минимум две различные команды. Идентификатор какой либо команды может стоять в поле под названием 1st_team_id  или в поле 2nd_team_id Если Вы хотите создать набор данных по наличию какой либо команды в календарных матчах  и есть связь между таблицами calendar и team то
> Доцент Васильевич (Andrey Vegger)
Ох, ну посмотрите же на свой запрос. У вас в условии (имена полей заменил):
a = c AND b = c
Отсюда следует, что a = b. Т. е. выбираются только те строки таблицы calendar, в которых одна команда соревнуется сама с собой.
> Дело в том, что у меня должна быть одна таблица, включающая полный список команд и информацию о них
В моем варианте у вас и будет _одна_ таблица. Но для выборки она будет использоваться как две, т. к. сопоставление записей производится по рядам. Вы в своем запросе просите, чтобы одному ряду таблицы calendar соответствовал ряд таблицы team, в котором id равен calendar.1st_team_id и он же равен calendar.2nd_team_id.
Но нужно, чтобы calendar.1st_team_id соответствовал полю team.id одного ряда, а calendar.2nd_team_id соответствал полю team.id уже другого ряда.
Именно поэтому таблица team джоинится у меня два раза, а чтобы MySQL могла опредедить, в каком случае к какому из двух присоединений я обращаюсь, этой таблице при джоинах присваиваются два синонима.


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.