2010-11-09 211 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

相關問題