Sql 如何在第二个联接表中使用多个条件进行联接?

Sql 如何在第二个联接表中使用多个条件进行联接?,sql,sql-server,sql-server-2008,tsql,join,Sql,Sql Server,Sql Server 2008,Tsql,Join,我有两张桌子。第一个表是客户列表 第二个表是这些客户拥有的设备列表,另一个字段包含该客户问题的一些数据。问题是,对于每个客户来说,可能存在多个问题 我需要对这些表进行联接,但只返回有两个问题的客户的结果 问题是,如果我加入或,我得到的结果包括只有一个问题的客户 如果我做了和,我不会得到任何结果,因为每一行只包含一个条件 在T-SQL 2008中如何执行此操作?您可以使用子查询而不是联接执行此操作: SELECT * FROM customers as c LEFT JOIN equipment

我有两张桌子。第一个表是客户列表

第二个表是这些客户拥有的设备列表,另一个字段包含该客户问题的一些数据。问题是,对于每个客户来说,可能存在多个问题

我需要对这些表进行联接,但只返回有两个问题的客户的结果

问题是,如果我加入或,我得到的结果包括只有一个问题的客户

如果我做了和,我不会得到任何结果,因为每一行只包含一个条件


在T-SQL 2008中如何执行此操作?

您可以使用子查询而不是联接执行此操作:

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 

或者,无论您想要什么值,您都可以使用子查询而不是联接:

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

或者无论你想要什么价值,除非我误解了,我认为如果你只对有两个具体问题的客户感兴趣,你会想要这样的东西:

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

你能进一步澄清你的问题吗?你的意思是你需要重新运行一个有2个或更多问题的结果吗?@Raymund:对,我需要返回两个问题都存在的客户。你能进一步澄清你的问题吗?你的意思是你需要重新运行一个有2个或更多问题的结果吗?@Raymund:对,我需要返回同时存在这两个问题的客户。这不会只返回存在0或1个问题的行吗。返回有2个或更多问题的行的结尾应该是'>1',返回只有2个问题的行的结尾应该是'=2'。正如我之前所写的,您可以使用任何您想要的子句,查询的jist是在选择子查询中的计数,我希望您可以更改它以满足您的需要。这不只是返回有0或1个问题的行吗。返回有2个或更多问题的行的末尾应该是'>1',返回只有2个问题的行的末尾应该是'=2'。正如我之前写的,您可以使用任何您想要的子句,查询的jist是在选择子查询中的计数,我希望您可以更改它以满足您的需要。