#sql
#sql
Вопрос:
У меня есть три таблицы:
- Таблица КЛИЕНТА: у нее есть идентификатор и имя.
- Таблица CAR: у нее есть свой собственный идентификатор и имя автомобиля
- Таблица 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. Да, это сработало так хорошо, большое спасибо. Но почему внутреннее соединение вместо левого соединения?, я думал, что в этом случае мне понадобится левое соединение