如何在第二个连接表中进行多个条件的连接?

时间:2010-11-09 23:00:47

标签: sql sql-server sql-server-2008 tsql join

我有2张桌子。第一个表是客户列表。

第二个表是这些客户拥有的设备列表,其中包含该客户的一些数据(客户问题)。问题是,对于每个客户,可能存在多个问题。

我需要在这些表上进行连接,但只返回有两个问题的客户的结果。

问题是,如果我使用OR进行加入,我会得到包括客户在内只有其中一个问题的结果。

如果我做了AND,我没有得到任何结果,因为每行只包含一个条件。

如何在T-SQL 2008中执行此操作?

3 个答案:

答案 0 :(得分:4)

除非我误解,否则我认为你想要这样的事情(如果你只对有两个具体问题的客户感兴趣):

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以使用子查询而不是连接来执行此操作:

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

或您想要的任何价值