我有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