我有2個表格。第一張表是客戶名單。如何在第二個連接表中使用多個條件進行連接?
第二個表是這些客戶與另一個字段關於該客戶的某些數據(客戶問題)擁有的設備列表。問題在於,對於每個客戶而言,可能存在多個問題。
我需要在這些表上做一個連接,但只返回有這兩個問題的客戶的結果。
問題是,如果我與OR進行連接,我會得到包括僅有這些問題之一的客戶的結果。
如果我這樣做,我沒有得到任何結果,因爲每一行只包含一個條件。
我如何在T-SQL 2008中做到這一點?
我有2個表格。第一張表是客戶名單。如何在第二個連接表中使用多個條件進行連接?
第二個表是這些客戶與另一個字段關於該客戶的某些數據(客戶問題)擁有的設備列表。問題在於,對於每個客戶而言,可能存在多個問題。
我需要在這些表上做一個連接,但只返回有這兩個問題的客戶的結果。
問題是,如果我與OR進行連接,我會得到包括僅有這些問題之一的客戶的結果。
如果我這樣做,我沒有得到任何結果,因爲每一行只包含一個條件。
我如何在T-SQL 2008中做到這一點?
除非我誤解了,我想你想是這樣的(如果您只對有兩個特定問題的客戶感興趣):
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
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
你可以用一個子查詢做到這一點,而不是連接:
select * from Customer C where (select Count(*) from Issue I where I.CustomerID = C.CustomerID) < 2
或任何價值,你想
你可以進一步澄清你的問題,你的意思是你需要重新運行結果與2個或更多的問題? – Raymund 2010-11-09 23:05:27
@Raymund:對,我需要回到有這兩個問題的客戶。 – rsteckly 2010-11-09 23:10:19