【问题标题】:JOIN multiple tables sharing the same Primary KeyJOIN 共享相同主键的多个表
【发布时间】:2020-06-16 09:46:32
【问题描述】:

我有 4 个表共享相同的 PK usercode。我需要根据用户代码从每个表中检索各种列。例如:

  • T1(用户代码,A1,A2,A3,...)
  • T2(用户代码,B1,B2,B3,...)
  • T3(用户代码,C1,C2,C3,...)
  • T4(用户代码,D1,D2,D3,...)

我尝试了以下方法:

SELECT A1, A2, B3, B4, C2, D1, D4 
FROM T1 A 
JOIN T2 B ON a.usercode = b.usercode
JOIN T3 C ON b.usercode = c.usercode 
JOIN T4 D ON c.usercode = d.usercode

当我这样做时,我会得到重复的结果。最好的方法是什么?

另外,每当我使用UNION 时,我都会收到错误消息

将数据类型 varchar 转换为数值时出错

我要疯了,任何线索都会有所帮助!谢谢

【问题讨论】:

  • 主键列无法合理地生成重复项。请提供示例数据、当前和期望的结果来展示您的用例。
  • 这个问题没有意义。我投票关闭。
  • 发布表模式。尝试 UNION 时遇到数据类型不匹配。您需要确定哪个字段不匹配,执行 to_char() 或 to_number() 之类的操作以将值转换为匹配的数据类型。您应该能够 SELECT DISTINCT 删除重复项,可能。
  • 样本数据和期望的结果会有所帮助。

标签: sql-server join ssms union


【解决方案1】:

你可以这样做: 我希望您的超级代码具有相同的类型

SELECT A1,A2,B3,B4,C2,D1,D4 
FROM 
(select usercode from T1 union select usercode from T2 
union select usercode from T3 union select usercode from T4)u
JOIN T1 A ON u.usercode = a.usercode
JOIN T2 B ON u.usercode = b.usercode
JOIN T3 C ON u.usercode = c.usercode 
JOIN T4 D ON u.usercode = d.usercode

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 2023-02-06
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多