2014-09-03 3 views
1

Это может быть простая проблема, чтобы исправить это извините.2 Внутренние соединения SQL Server в операторе Select

У меня есть оператор SQL select, и у меня есть 2 столбца, оба являются внешними ключами в одной таблице. Вот пример:

ProductID = 5 | Продавец (UserID) = 3 | Покупатель (UserID) = 2

Я хочу выбрать заявление для возврата

продукта = 5 | Продавец (UserID) = Гэри Джонс | Покупатель (UserID) = John Smith

Select Product.ID 
     User.ID as Seller 
     User.ID as Buyer 
From Orders 
Inner Join Product on Product.ID = Orders.ProductID 
Inner Join User on User.ID = Orders.UserID --(For both buyer and seller) 

Вполне возможно, что покупатели не является пользователем, так должно быть оставлено пустое значение, если нет пользователя:

Продукт = 5 | Продавец (UserID) = Гэри Джонс | Покупатель (UserID) = Null

+0

Изменить второй 'Inner Join' на' Left Join' – Siyual

+0

2 изменения ... left присоединиться к таблицам, чтобы возвращать нули (внутренняя будет отбрасывать запись), и вам понадобятся два пользователя: два пользователя, один для покупателя и один для продавца (если только они не являются одним и тем же лицом?). есть ли идентификатор покупателя отдельно от идентификатора продавца в таблице заказов? – Twelfth

+0

@Twelfth - это отдельные поля в той же таблице, которые оба связаны с одним и тем же поле в таблице пользователей. Как мне сделать 2 соединения? – Chris

ответ

1

Вам нужен левый присоединиться, чтобы получить строки, где покупатели не являются пользователями, а также присоединиться к таблице пользователей дважды:

Select Product.ID 
     u1.ID as Seller -- this should maybe be u1.name and not id? 
     u2.ID as Buyer 
From Orders 
Inner Join Product on Product.ID = Orders.ProductID 
Inner Join User u1 on u1.ID = Orders.SellerID --(For seller) 
Left Join User u2 on u2.ID = Orders.BuyerID --(For buyer) 

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

+0

Спасибо, большое спасибо :) – Chris

1

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

SELECT 
    p.ID, 
    P.ProductName, 
    u1.Name as Seller, 
    u2.Name as Buyer 
FROM Orders o 
INNER JOIN Product p ON p.ID = o.ProductID 
LEFT JOIN User u1 ON u1.ID = o.SellerID 
LEFT JOIN User u2 ON u2.ID = o.BuyerID 
+0

Спасибо, очень благодарен :) – Chris

+0

@ user3279193 Без проблем, рад помочь. – Donal

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