Два идентификатора из одной таблицы в запросе - пытается получить имена для обоих идентификаторов - PullRequest
1 голос
/ 13 мая 2019

У меня есть пара таблиц, которые я пытаюсь связать вместе.Одна таблица (tblBrokeragePurchase) содержит информацию о заказе на покупку, выполненном клиентом.Внутри этой таблицы существует идентификатор покупателя и идентификатор продавца.Оба эти поля ссылаются на другую таблицу (tblContacts).Я хочу вывести полные имена как Покупателя, так и Продавца, но Access дает мне некоторое сожаление по поводу того, какие поля используются во многих аспектах моего оператора SQL.

Пока что это то, что я продолжаю для себя:

SELECT [First Name] & " " & [Last Name] AS BuyerName, 
       [First Name] & " " & [Last Name] AS SellerName 
FROM   (tblBrokeragePurchase 
        LEFT JOIN tblContacts 
               ON ( tblBrokeragePurchase.SellerID = tblContacts.ID ) 
                  AND ( tblBrokeragePurchase.BuyerID = tblContacts.ID )) 
       INNER JOIN qryCityLookup 
               ON tblBrokeragePurchase.ID = qryCityLookup.ID 
WHERE  ( ( [BuyerID] = [ID] ) 
         AND ( [SellerID] = [ID] ) ); 

Я вполне уверен, что это связано с утверждением WHERE.Покупатель и Продавец не будут одним и тем же лицом ( обычно? ).Так, где мне нужно исправить оператор JOIN или WHERE в моем SQL?

Ответы [ 2 ]

2 голосов
/ 13 мая 2019

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

SELECT Buyer.[First Name] & " " & Buyer.[Last Name] AS BuyerName, 
       Seller.[First Name] & " " & Seller.[Last Name] AS SellerName 
FROM   (tblBrokeragePurchase 
        LEFT JOIN tblContacts as Seller
               ON ( tblBrokeragePurchase.SellerID = tblContacts.ID ) 
        LEFT JOIN tblContacts as Buyer
               ON ( tblBrokeragePurchase.BuyerID = tblContacts.ID ) 
       INNER JOIN qryCityLookup 
               ON tblBrokeragePurchase.ID = qryCityLookup.ID 

Теперь, если вы ищете один идентификатор, тогда WHERE clausule, вероятно, должно быть

WHERE  ( ( [BuyerID] = [ID] ) 
         OR ( [SellerID] = [ID] ) ); 
1 голос
/ 13 мая 2019

Поскольку ваш запрос будет обращаться к двум отдельным записям из таблицы tblContacts для каждой записи в вашем tblBrokeragePurchase, на запись tblContacts нужно будет сослаться дважды, чтобы две отдельные записи моглибыть полученным запросом одновременно.

В MS Access следующее должно быть допустимым SQL:

select
    b.[First Name] & " " & b.[Last Name] as BuyerName, 
    s.[First Name] & " " & s.[Last Name] as SellerName 
from
    (
        (
            tblBrokeragePurchase p left join tblContacts s on p.SellerID = s.ID
        ) 
        left join tblContacts b on p.BuyerID = b.ID
    )
    inner join qryCityLookup c on p.ID = c.ID 
where
    p.BuyerID  = [YourBuyerID] and 
    p.SellerID = [YourSellerID]

Дополнительные скобки используются, поскольку MS Access требует, чтобы каждая пара соединенных таблиц / запросовбыть окруженным отдельным набором скобок - я опишу общую структуру здесь .

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