【发布时间】: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