【问题标题】:Join table on specific condition SQL在特定条件 SQL 上连接表
【发布时间】:2021-12-28 19:03:52
【问题描述】:

我有桌子 A 和 B。

我想基本上只在满足某些条件时才将表B加入表A(否则显示NULL)。表 A 记录了事务,表 B 具有记录该事务的实际用户名如果它是外部用户。

不幸的是,我对如何使这成为可能的想法 1) 排除由内部用户生成的结果 2) 抛出转换失败错误,因为内部用户在表 B 中不存在并且格式不同正在加入该列。

连接列(应用程序名称)的内部用户使用“Microsoft SQL Server Management Studio - Query”,但外部用户使用表 B 的“674d9234206-3p57-3453-8935-8641dufwhaih20f9”。

这个查询给了我转换错误:

select TableB.userid,TableA.*
left outer join TableB on cast(TableB.TransactionId as varchar(36)) = TableA.ApplicationName

此查询将我的内部用户从结果中排除:

select TableB.userid,TableA.*
join TableB on cast(TableB.TransactionId as varchar(36)) = TableA.ApplicationName

如果是外部用户,我希望从表 B 中显示 userid 列,否则默认为 NULL 或指示 INTERNAL_USER 的列。这甚至可能吗?我想我读过一些关于 coalesce 的东西,但是当连接甚至不可能时我不知道如何使用它。

【问题讨论】:

  • 列的数据类型是什么?发布示例数据和预期结果以阐明您想要什么。
  • 轻松为您提供帮助:minimal reproducible example.
  • 我只需要表 B 中的 1 列,即 user_id(整数)。表 A 中的连接列 applicationname 为 nvchar128,格式为 74d9234206-3p57-3453-8935-8641dufwhaih20f9 或 Microsoft SQL Server Management Studio - Query。对应的表 B 列是 PK uniqidentifer not null(我没有看到除此之外的其他类型),但它的格式也是 74d9234206-3p57-3453-8935-8641dufwhaih20f9。

标签: sql


【解决方案1】:

我的同事帮我解决了这个问题:

我猜userid 被拉入是一个整数,所以我无法输入 否则 A.Username 不是整数。

Select top 1000
case when A.UserName ='EXTERNAL_USER' then B.userid else '999999' end [userid]
  ah.*
From Table A as A with (nolock)
left outer join Table B as B  (nolock) on  A.ApplicationName = cast(B.TransactionId as varchar(36))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-05
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    相关资源
    最近更新 更多