Как сделать объединение с несколькими условиями во второй объединенной таблице? - PullRequest
0 голосов
/ 10 ноября 2010

У меня есть 2 таблицы.Первая таблица представляет собой список клиентов.

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

Мне нужно объединить эти таблицы, но возвращать результаты только для клиентов, у которых есть две из этих проблем.

Проблема в том, чтоЕсли я выполняю объединение с OR, я получаю результаты, включая клиентов, у которых есть только одна из этих проблем.

Если я выполняю AND, я не получаю никаких результатов, потому что каждая строка содержит только одно условие.

Как я могу сделать это в T-SQL 2008?

Ответы [ 3 ]

4 голосов
/ 10 ноября 2010

Если я не понял неправильно, я думаю, что вы хотите что-то вроде этого (если вы заинтересованы только в клиентах, у которых есть 2 специфические проблемы):

SELECT c.*
FROM Customer c
    INNER JOIN CustomerEquipment e1 ON c.CustomerId = e1.CustomerId AND e1.Issue = 'Issue 1'
    INNER JOIN CustomerEquipment e2 ON c.CustomerId = e2.CustomerId AND e2.Issue = 'Issue 2'

Или, чтобы найти любых клиентов, которые имеют несколькопроблемы независимо от типа:

;WITH Issues AS
(
    SELECT CustomerId, COUNT(*)
    FROM CustomerEquipment
    GROUP BY CustomerId
    HAVING COUNT(*) > 1
)

SELECT c.*
FROM Customer c
    JOIN Issues i ON c.CustomerId = i.CustomerId
0 голосов
/ 10 ноября 2010

Вы можете сделать это с помощью подзапроса вместо Joins:

select * from Customer C where (select Count(*) from Issue I where I.CustomerID = C.CustomerID) < 2 

или любое другое значение, которое вы хотите

0 голосов
/ 10 ноября 2010
SELECT * 
FROM customers as c
LEFT JOIN equipment as e
ON c.customer_id = e.customer_id  --> what you are joining on
WHERE (
          SELECT COUNT(*) 
          FROM equipment as e2 
          WHERE e2.customer.id = c.customer_id
      ) > 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...