Как ВЫБРАТЬ из таблицы A, где он соответствует всем руководствам, принадлежащим конкретному клиенту из таблицы B - PullRequest
0 голосов
/ 26 марта 2012

У меня есть две таблицы; A и B. Таблица A содержит столбец GUID. Таблица B содержит столбец GUID и столбец ClientID. В таблице B ClientID могут быть сопоставлены с несколькими GUID. Если бы мне дали 1 GUID, как бы я выбрал все GUID из таблицы A, которые принадлежат тому же ClientID, что и данный GUID?

Например, если таблица A имеет три строки:

Row1 | 11111111-2222-3333-4444-555555555555  
Row2 | 22222222-3333-4444-5555-666666666666  
Row3 | 33333333-4444-5555-6666-777777777777

Таблица B имеет 3 строки:

Row1 | ClientA | 11111111-2222-3333-4444-555555555555  
Row2 | ClientB | 22222222-3333-4444-5555-666666666666  
Row3 | ClientA | 33333333-4444-5555-6666-777777777777  

Мне дали GUID (11111111-2222-3333-4444-555555555555), как мне написать оператор выбора, чтобы найти все GUID из A, которые соответствуют ClientID из таблицы B? (11111111-2222-3333-4444-555555555555 & 33333333-4444-5555-6666-777777777777)

Ответы [ 2 ]

1 голос
/ 26 марта 2012

Эх, как насчет первого поиска клиента с заданным guid из таблицы b

SELECT client FROM table_b WHERE guid = <given_guid>

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

SELECT guid FROM table_b WHERE client = <client>

Я имею в виду, что вы можете сделать это за один раз, используя подзапросы

SELECT guid FROM table_b WHERE client IN ( 
    SELECT client FROM table_b WHERE guid = <given_guid>
)

но зачем все усложнять

Если вам нужны дополнительные данные из таблицы a для руководства для клиентов, вы можете либо JOIN, либо использовать приведенный выше в качестве другого подзапроса, например,

SELECT guid FROM table_a WHERE guid IN (
    SELECT guid FROM table_b WHERE client IN ( 
        SELECT client FROM table_b WHERE guid = <given_guid>
    )
)

p.s. Я ненавижу использовать подзапросы, там почти всегда есть лучший способ

0 голосов
/ 26 марта 2012
SELECT a_guid
  FROM TableA
INTERSECT 
SELECT a_guid
  FROM TableB
 WHERE ClientID IN ( SELECT ClientID
                       FROM TableB
                      WHERE a_guid = @given_guid );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...