SQL Server:条件匹配时从第二个表获取数据

gon

我有2个表(用户,userContact)由一列连接userID

它们的结构如下:

用户

[User_id]
[User_Name]

UserContact

[UserContact_id]
[User_id]
[UserContact_Type]
[UserContact_Description]

因此,对于相同的对象[User_id],可以有多个[ UserContact_id]。

我的问题是:我想建立一个联接,该联接[User_id]从表返回每个User并且包括[UserContact_Description]WHEN[UserContact_Type]等于3,但不重复结果。

我尝试了什么:

SELECT DISTINCT 
    u.[User_id],
    CASE
       WHEN c.[UserContact_Type] = 3
          THEN c.[UserContact_Description]
    END AS UserContact
FROM 
    Table.user AS u
LEFT JOIN 
    Table.userContact AS c ON u.[User_id] = c.[User_id]

我得到这样的东西:

User_id    UserContact
----------------------
    6009    NULL
    7010    NULL
    7010    [email protected]
    7012    NULL
    8007    NULL
    8007    [email protected]

它返回的所有结果Table.user,但会为每个[User_id]关联的数据([UserContact_Type]而不是3)复制数据

我需要的是[UserContact_Description]仅在时返回[UserContact_Type] = 3

这是我对StackOverflow的第一个问题。我希望我做得对,但请随时指出我在帖子中犯的任何错误。

非常感谢大家。

编辑:

正如您在下表中所见,[User_id]从来没有与之相关的[UserContact_Type]

UserContact_id  User_id UserContact_Type
40107           4747        1
40108           4747        5
40109           4747        3
41107           5748        6
41108           5748        3
41215           6009        1
41216           6009        6
42222           7010        3
42223           7010        6
43214           8007        3

我想要什么:找到[User_id]与a关联时[UserContact_Type] = 3,返回[UserContact_Description]如果与[User_id]条件不相关,则不返回任何内容,并将该列[UserContact_Description]留空或为null。

我要避免的事情是这样的结果:

User_id UserContact
    6009    NULL
    7010    NULL
    7010    [email protected]

[User_id] = 6009很好,但是[User_id] = 7010是重复的,这是我的问题。我想要所有[User_id]。但是我只需要用[UserContact_Type]等于3来填充UserContact列。

希望现在更加清晰。

去世

您需要表的左连接和条件聚合:

select u.[User_id], u.[User_Name],
  max(case 
      when c.[UserContact_Type] = 3 then c.[UserContact_Description] 
      else null 
    end 
  ) as UserContact_Description 
from [User] u left join [userContact] c
on c.[User_id] = u.[User_id]
group by u.[User_id], u.[User_Name]

参见演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL Server:从一个表中获取所有数据,但条件是第二个表列

如何在连接两个表时从第二个表中获取前 1 行:SQL Server 2014

SQL查询以查找匹配的记录,但不包括与第二个条件匹配的记录

SQL Server:排除名称列与第二个排除表中的值匹配的记录

SQL连接两个表,仅获取第二个表的最新条目

在第二个表中具有多行条件的SQL Join

SQL JOIN 并在第二个表中使用某些条件限制结果

两个 PDO sql 语句/使用为第二个语句获取的数据

如何从一个表中获取 SQL 值,其中共享值在第二个表中匹配?

Sql Query 从第二个表中获取详细信息

在JOIN上从SQL的第二个表中获取最新结果

sql查询一次获取第二个表的值

SQL从第二个表中填充值

sql从第二个表加入csv

SQL 连接表并根据数据将第二个表显示为两列

SQL Join:如何显示第一个表数据,即使是第二个表条件为假

SQL仅使用Join从2个表中获取数据,我们还需要第二个表中的空记录

SQL 更新第一个表,在第二个表中使用条件变量检索

优化SQL查询-从第二个表中有多行的两个表中获取记录

基于第二个数据集中的两个条件提取元数据的 SQL 查询

SQL Server-根据第二个表中的最早日期加入两个表

如果第二个表为空,则在匹配行或全部上执行SQL Join Table

我想将第一个SQL表中的数据插入第二个SQL表中,同时在第二个SQL表中不存在额外的列

选择其他表中不存在的行,通过第二个表中的数据联接[SQL]

SQL Server:使用第一个插入的输出插入第二个表

SQL Server:从第一个表链接到第二个表的主键的多个外键

SQL Server:如何获取单词中的第一个或第二个字母?

SQL Server AFTER INSERT 触发器每次插入更新第二个表多次

SQL 在一个表中查找结果基于第二个表