我有2张桌子。第一个表是客户列表。
第二个表是这些客户拥有的设备列表,其中包含该客户的一些数据(客户问题)。问题是,对于每个客户,可能存在多个问题。
我需要在这些表上进行连接,但只返回有两个问题的客户的结果。
问题是,如果我使用OR进行加入,我会得到包括客户在内只有其中一个问题的结果。
如果我做了AND,我没有得到任何结果,因为每行只包含一个条件。
如何在T-SQL 2008中执行此操作?
答案 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
或您想要的任何价值