2 таблицы - один клиент, одна транзакция.Как справиться с клиентом без транзакции? - PullRequest
1 голос
/ 25 июня 2019

У меня 2 таблицы - один клиент, одна транзакция. У одного клиента нет транзакций. Как мне справиться с этим? Поскольку я пытаюсь присоединиться к своим таблицам, клиент без транзакции не отображается, как показано в коде ниже.

SELECT Orders.Customer_Id, Customers.AcctOpenDate, Customers.CustomerFirstName, Customers.CustomerLastName, Orders.TxnDate, Orders.Amount
FROM Orders
INNER JOIN Customers ON Orders.Customer_Id=Customers.Customer_Id;

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

Ответы [ 4 ]

2 голосов
/ 25 июня 2019

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

 SELECT Orders.Customer_Id, Customers.AcctOpenDate, 
 Customers.CustomerFirstName, Customers.CustomerLastName, 
 Orders.TxnDate, Orders.Amount
 FROM Orders
 Right Outer JOIN Customers ON Orders.Customer_Id=Customers.Customer_Id;
0 голосов
/ 25 июня 2019

Я настоятельно рекомендую LEFT JOIN.Это сохраняет все строки в первой таблице вместе с соответствующими столбцами во второй.Если совпадающих строк нет, эти столбцы имеют вид NULL:

SELECT c.Customer_Id, c.AcctOpenDate, c.CustomerFirstName, c.CustomerLastName,
       o.TxnDate, o.Amount
FROM Customers c LEFT JOIN
     Orders o
     ON o.Customer_Id = c.Customer_Id;

Хотя вы можете использовать RIGHT JOIN, я никогда не использую RIGHT JOIN s, потому что я нахожу их много труднее следовать.Логика «сохранить все строки в первой таблице, которую я прочитал», относительно проста.Сложнее следовать логике «я не знаю, какие строки я храню до тех пор, пока не прочитаю последнюю таблицу».

Также обратите внимание, что я включил псевдонимы таблиц и изменил CustomerId для получения от customers - таблица, в которой хранятся все строки.

0 голосов
/ 25 июня 2019

ВНУТРЕННИЕ СОЕДИНЕНИЯ показывают только те записи, которые присутствуют в ОБАХ таблицах

OUTER join присоединяет SQL к списку всех записей, присутствующих в назначенной таблице, и показывает NULL для полей в другой таблице, которых нет

LEFT OUTER JOIN (первая таблица) ПРЯМОЕ НАРУЖНОЕ СОЕДИНЕНИЕ (второй стол) FULL OUTER JOIN (все записи для обеих таблиц)

Узнайте больше о типах соединений и о том, как обрабатывать NULLS, и это составляет 90% написания сценариев SQL.

Ниже приведен тот же запрос с левым соединением и использованием ISNULL для преобразования столбца суммы в 0, если в нем нет записей

SELECT Orders.Customer_Id, Customers.AcctOpenDate, Customers.CustomerFirstName, Customers.CustomerLastName
, Orders.TxnDate, ISNULL(Orders.Amount,0)
FROM Customers
LEFT OUTER JOIN Orders ON Orders.Customer_Id=Customers.Customer_Id;
0 голосов
/ 25 июня 2019

попробуйте это:

 SELECT Orders.Customer_Id, Customers.AcctOpenDate, Customers.CustomerFirstName, Customers.CustomerLastName, Orders.TxnDate, Orders.Amount
 FROM Orders
 Right OUTER JOIN Customers ON Orders.Customer_Id=Customers.Customer_Id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...