Справка по SQL-запросам - Объединения - PullRequest
0 голосов
/ 29 апреля 2018

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

customer(Id, Name, Address, PhoneNumber);
station (Id, City, Country, Location);
car(Id, Reg, Type, Milage);
contract(CustId, StationId, CarId);

Мне нужно использовать эти таблицы, чтобы найти всех клиентов, которые арендовали BMW. Я написал свой запрос как:

SELECT *
FROM CUSTOMER, CAR, CONTRACT
WHERE CUSTOMER.ID = CONTRACT.CUSTID
AND CAR.TYPE = "BMW";

Это было бы правильно? Я думал, что мне нужно присоединиться к столам, так как невозможно узнать, какой клиент арендовал какой автомобиль, но я чувствую, что могу что-то делать не так? Любая помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 29 апреля 2018
SELECT co.Id as ContractId , Name, Address, PhoneNumber,
cu.Id as CustId , City, Country, Location,
ca.Id as CarId, Reg, Type, Milage,
FROM CONTRACT co JOIN
CUSTOMER cu
ON co.CUSTID = cu.ID JOIN
CAR ca
ON co.CARID = ca.ID
STATION st
ON co.StationId = st.ID 
WHERE ca.TYPE = 'BMW';

Вам нужно явно упомянуть имена столбцов, потому что для поля Id будет конфликт имен, который является общим для многих таблиц

PS: просто изменив запрос от Гордона Линоффа, ответьте на тот же вопрос

0 голосов
/ 29 апреля 2018

Это должно помочь: (Вам не нужно беспокоиться о станции согласно вашему требованию)

SELECT distinct cus.*
FROM CONTRACT con 
JOIN CUSTOMER cus ON con.CUSTID = cus.ID 
JOIN CAR car ON co.CARID = car.ID 
WHERE car.TYPE = 'BMW';
0 голосов
/ 29 апреля 2018

Нет, ваш запрос неверен - он неверен по логике и плохо написан.

Лучший способ написать запрос - использовать правильный, явный, стандартный синтаксис JOIN:

SELECT *
FROM CONTRACT co JOIN
     CUSTOMER cu
     ON co.CUSTID = cu.ID JOIN
     CAR ca
     ON co.CARID = ca.ID  -- this is a guess
WHERE ca.TYPE = 'BMW';

Примечания:

  • Вы пропускаете условие JOIN между CONTRACT и CAR (предположительно). С явным синтаксисом JOIN это довольно очевидно.
  • Я предполагаю, что справа JOIN условие для CAR.
  • Используйте одинарные кавычки для строковых констант. Это стандарт SQL, хотя некоторые базы данных допускают и двойные кавычки.
  • SELECT * обычно не рекомендуется. Обычно рекомендуется перечислять столбцы, особенно в том случае, когда одно и то же имя столбца может отображаться в разных таблицах.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...