объединение трех таблиц с помощью SQL

#sql

#sql

Вопрос:

У меня есть три таблицы:

  1. Таблица КЛИЕНТА: у нее есть идентификатор и имя.
  2. Таблица CAR: у нее есть свой собственный идентификатор и имя автомобиля
  3. Таблица CAR-owner: она имеет id_car (такой же, как идентификатор АВТОМОБИЛЯ) и id_owner(такой же, как идентификатор КЛИЕНТА)

Я хочу ВЫБРАТЬ имя КЛИЕНТА, имя автомобиля, которым владеет клиент.

Я пробовал это, но я не знаю, что я делаю не так

 SELECT 
    CLIENT.name, CAR.name, CLIENT.id
        FROM CLIENT 
        LEFT JOIN CAR-owner ON CLIENT.id = CAR-owner.id_owner 
        LEFT JOIN CAR ON CAR.id = CAR-owner.id_car 
        WHERE CLIENT.id = ?;
  

Комментарии:

1. CAR-owner недопустимый идентификатор, он должен быть разделен обратными галочками.

2. owner.id ? owner Таблицы нет.

3. @jarlh вы правы, извините, это была просто ошибка копирования. должен ли я возвращать.ticks везде, где написано CAR-owner или что?

4. Вместо этого я бы выбрал имя таблицы, которое не нужно разделять, например car_owner .

5. @jarlh Я не уверен, что понимаю, что вы имеете в виду, не могли бы вы, пожалуйста, отредактировать запрос для меня?, я бы понял это лучше, когда он будет написан, я еще не очень знаком с sql

Ответ №1:

Просто присоединяйтесь:

 select cl.name client_name, ca.name car_name
from client cl
inner join car_owner co on co.id_owner = cl.id
inner join car ca on ca.id = cl.id_car
where cl.id = ?
  

Я бы настоятельно рекомендовал не использовать такие символы, как - в именах таблиц. Для этого требуется указывать идентификатор везде, где вы его используете:

 select cl.name client_name, ca.name car_name
from client cl
inner join `car-owner` co on co.id_owner = cl.id
inner join car ca on ca.id = cl.id_car
where cl.id = ?
  

Я не уверен, что вам действительно нужно left join здесь, поэтому я использовал inner join . Вы можете отменить это, если хотите иначе.

Комментарии:

1. Да, это сработало так хорошо, большое спасибо. Но почему внутреннее соединение вместо левого соединения?, я думал, что в этом случае мне понадобится левое соединение