繁体   English   中英

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

[英]How to do a join with multiple conditions in the second joined table?

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

第二张表是这些客户在另一个字段中拥有的设备的列表,其中包含有关该客户的一些数据(客户问题)。 问题是对于每个客户,可能会有多个问题。

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

麻烦的是,如果我加入OR,我会得到结果,其中包括只有这些问题之一的客户。

如果执行AND,则不会得到任何结果,因为每一行仅包含一个条件。

如何在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

您可以使用子查询来代替Joins:

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

或您想要的任何值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM