SQL получает несколько значений (из одного столбца из одной таблицы) из таблицы с двумя внешними ключами в первую таблицу - PullRequest
0 голосов
/ 24 декабря 2018

Таблица пользователей имеет два столбца: Идентификатор и имя. Таблица Покупанных автомобилей имеет 4 столбца: Номер лицензии, Идентификатор владельца, Идентификатор продавца и Цена продажи, которая не имеет значения.

Для примера я получил эти данные Пользователи (1, Джош) (2, Джонатан) (3, Ор) (4, Джейкоб)

Автомобили (123, неактуальные данные) (456, неактуальные данные) (789, неактуальные данные)

Приобретенные автомобили (123, 2, 1, 50 КБ) (456, 3, 1, 80 КБ) (789, 4, 1, 30 КБ)

Выход (123, Джонатан, Джош) (456, Ор, Джош) (789, Джейкоб, Джош)

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

и запросом будет возвращаться LicensePlate, имя владельца, имя работника

SQL CODE

Select Cars.LicensePlate From Cars
Union 
Select Users.Name as WorkerName From Users, PurchasedCars 
Where Users.Id=PurchasedCars.Seller
Union
Select Users.Name as BuyerName From Users, PurchasedCars 
Where Users.Id=PurchasedCars.Owner

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Присоединяйтесь дважды против пользователей, один раз для владельца и один раз для продавца

SELECT p.licensePlate, u1.name as 'Workers name', u2.name as 'Sellers name'
FROM PurchacedCars p
JOIN Users u1 ON p.seller = u1.id
JOIN Users u2 ON p.owner = u2.id
0 голосов
/ 24 декабря 2018

Думаю, вам нужно просто присоединиться Users к PurchasedCars дважды, по одному разу для каждого имени:

SELECT
    pc.LicensePlate,
    u1.Name AS worker_name,
    u2.Name AS owner_name
FROM PurchasedCars pc
INNER JOIN Users u1
    ON pc.Seller = u1.Id
INNER JOIN Users u2
    ON pc.Owner = u2.Id;

enter image description here

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...