2010-11-09 212 views
0

我有2个表格。第一张表是客户名单。如何在第二个连接表中使用多个条件进行连接?

第二个表是这些客户与另一个字段关于该客户的某些数据(客户问题)拥有的设备列表。问题在于,对于每个客户而言,可能存在多个问题。

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

问题是,如果我与OR进行连接,我会得到包括仅有这些问题之一的客户的结果。

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

我如何在T-SQL 2008中做到这一点?

+0

你可以进一步澄清你的问题,你的意思是你需要重新运行结果与2个或更多的问题? – Raymund 2010-11-09 23:05:27

+0

@Raymund:对,我需要回到有这两个问题的客户。 – rsteckly 2010-11-09 23:10:19

回答

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 
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 
0

你可以用一个子查询做到这一点,而不是连接:

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

或任何价值,你想

+0

这不会只返回有0或1个问题的行。最后应该是'> 1'以返回具有2个或更多问题的行或'= 2'来返回只有2个问题的行。我之前写过的 – Kyra 2010-11-09 23:09:17

+0

,你可以使用你想要的任何子句,查询的jist是在子查询中选择计数,我希望你可以改变它来满足你的需要。 – dexter 2010-11-10 14:47:25

相关问题