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

标签 sql sql-server sql-server-2008 t-sql join

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

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

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

问题是,如果我使用 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

关于sql - 如何在第二个连接表中进行多个条件的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4139602/

相关文章:

SQL Server比较有多少数据匹配,并且只在一张表中

sql - 如何检索热门项目的结果

sql - Oracle:选择 CSV 格式的项目?

c# - 如何在 Entity Framework 中创建返回 IQueryable<T> 的导航属性

mysql - MySQL 的 SQL 迁移助手

sql - 将行转换为列 SQL 2008

sql - 在 codeigniter SQL 上设置变量

php - 使用 PHP 批量输入 SQL 行

c# - 在 SQL Server 远程访问方面需要帮助

SQL 选择不同的列