2016-04-16 5 views
4

Мои таблиц БД таковы:Как добавить один и тот же столбец дважды в таблицу в разных местах?

  1. маршруты - таблица маршрутов, с колоннами:
    а. destination_id
    b. departure_id
  2. пункты назначения - таблица для всех пунктов назначения с колонками:
    a. destination_id
    b. destination_name.

Поскольку каждый пункт назначения также является отправной точкой, я использую одну таблицу для обоих.

связь выглядит следующим образом:

1. routes.destination_id = destinations.destination_id,
также
2. routes.departure_id = destinations.destination_id

Результат мне нужен, как описано:

Если route.destination_id = 3 и routes.departure_id = 5, я хочу сопоставить каждое из них с соответствующим именем в таблице адресатов и поместить в результат правильные имена столбцов, для отправки я хочу называть его departure_cit y и то же для назначения. Сейчас я получаю одно и то же имя для обоих идентификаторов, поэтому, если destination_id # 3 - это Нью-Йорк, а destination_id # 5 - Лас-Вегас, я получу оба, как Нью-Йорк, и это не то, что мне нужно.

До сих пор мой запрос выглядит следующим образом:

SELECT routes.*, destinations.destination_name as 'departure_city', destinations.destination_name as 'destination_city' 
FROM routes, destinations 
WHERE routes.route_departure_id = destinations.destination_id 

Перед тем, как говорят мне использовать JOIN, я сделал это с JOIN, но не может изменить имя столбца! Кроме того, я всегда получал все столбцы таблицы, и я не знаю, как получить только необходимые столбцы с помощью JOIN!

В настоящее время мои проблемы состоят в том, что я не могу получить значение из пунктов назначения дважды, один раз для route_destination и один для route_departure и показать разные значения.

+0

Запрос в этом вопросе уже задает операцию соединения двух таблиц в предложении FROM, хотя, используя древний синтаксис «запятая» вместо нового ключевого слова JOIN. (Мы предпочитаем использовать синтаксис синтаксиса старой школы для операции соединения и использовать ключевое слово JOIN, но это действительно не изменяет запрос.) Мы можем назначить псевдоним выражению в списке SELECT, чтобы назначить имя столбцу в наборе результатов. Нам потребуется одна операция соединения, чтобы найти город «отъезд», а также вторую операцию присоединения к поиску города «прибытия». – spencer7593

ответ

2

Вы ищете два присоединяется:

SELECT r.*, 
     dep.destination_name as departure_city, 
     dest.destination_name as destination_city 
FROM routes r JOIN 
    destinations dep 
    ON r.departure_id = dep.destination_id JOIN 
    destinations dest 
    ON r.destination_id = dest.destination_id; 

Дополнительный совет:

  • Использование псевдонимов таблиц. Они облегчают запись и чтение запроса.
  • Никогда запятыми в разделе FROM. Всегда использовать явно JOIN синтаксис.
  • Не используйте одинарные кавычки для определения псевдонимов столбцов. Используйте только одинарные кавычки для констант строк и дат. Используйте обратные выходы, если вы используете имя, которое должно быть указано (а затем, измените имя, чтобы обратные ссылки не были нужны).
+0

Большое спасибо за быстрый и замечательный ответ! Это потрясающе! Я узнал, что я не очень хорошо понимаю логику реализации SQL-запросов, и теперь я понимаю это намного лучше, благодаря вам! Если вы можете порекомендовать любую книгу, которую я должен прочитать, чтобы заострить свои навыки работы с MySQL, как профессионал, это мне очень поможет, мне это не нравится, когда мне не хватает знаний! В любом случае, спасибо вам большое за то, что вы делитесь своим богатым опытом! –

+0

@EliranLevi. , , Конечно, я рекомендую книги, которые я пишу. Однако я не рекламирую их в Stack Overflow. Вы можете посмотреть в другом месте в Интернете, например, в Amazon. –

Смежные вопросы