объединение двух таблиц на основе нескольких критериев - PullRequest
0 голосов
/ 07 июня 2018

У меня есть список клиентов, которых я пытаюсь получить, но не совсем уверен, правильно ли я это делаю.У меня есть около 20 тысяч записей, и я надеюсь, что сделаю это правильно.В основном у меня есть 2 разные клиентские таблицы, которые принадлежат двум разным приложениям, но хранятся в одной базе данных.

Клиент, Джон Доу (бывший), может находиться в обеих клиентских таблицах с разными идентификаторами клиента, однако, иметь уникальный идентификатор, который одинаков в обеих таблицах.Так, например, Джон Доу может иметь clientID = 7 в tbl1 и ClientID = 11 в tb2, но в обеих таблицах клиентов UniqueID равен 129009.

Вот базовая структура.Это первые 2 таблицы.

tblClient1                             tblServiceClient1
ClientID        UniqueID               ClientID          ClientServiceType
17              12345                  17                8
15              34567                  15                8

Второй набор таблиц -

tblClient2                             tblClientService2
ClientID        UniqueID               ClientID           ClientServiceType
58              12345                  58                 8
89              34567                  89                 7

Я надеюсь получить список клиентов из обоих наборов таблиц, где:-Клиент должен существовать в tblClient1 & tblClient2 -Клиент должен иметь ClientServiceType = 8 в tblClientServiceType1 & tblClientServiceType2

вот что я надеюсь достичь:

ClientID1            ClientID2           UniqueID
17                   58                  12345

присоединиться ятаблицы, в которых клиенты в обеих таблицах ClientID имеют одинаковый UniqueID, и оба клиента имеют ClientSErviceType = 8

Я вижу только этого одного клиента, потому что другой клиент имеет ClientServiceType = 7

  Select tblClient1.ClientID, tblClient2.ClientID, tblClient1.UniqueID
       From tblClient1 
       inner join tblClientService1 on tblClient1.ClientID = tblClientService1.ClientID 
       inner join tblClient2 on tblClient1.UniqueID = tblClient2.UniqueID 
       inner join tblServiceClient2 on tblClient2.ClientID = tblServiceClient2.ClientID
  Group By tblClient1.ClientID, tblClient2.ClientID, tblClient1.UniqueID
  Having tblServiceClient1.ClientServiceType = 8 and tblServiceClient2.ClientServiceType=8

1 Ответ

0 голосов
/ 07 июня 2018

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

Select c1.ClientID
    , c2.ClientID
    , c1.UniqueID
From tblClient1 c1
inner join tblClientService1 cs1 on c1.ClientID = cs1.ClientID 
inner join tblClient2 c2 on c1.UniqueID = c2.UniqueID 
inner join tblServiceClient2 sc2 on c2.ClientID = sc2.ClientID
    AND cs1.ClientServiceType = sc2.ClientServiceType
where cs1.ClientServiceType = 8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...