【问题标题】:Join two tables in mssql with column int and varchar having comma seperated values连接 mysql 中的两个表,列 int 和 varchar 具有逗号分隔值
【发布时间】:2017-11-22 06:10:24
【问题描述】:

我有 2 张桌子作为 tblemployee 和 tbllead 。我的问题是在 tblemployee 我有列 id 作为整数值和 tbllead 列 leademployees 具有逗号分隔值的 varchar。

所以当我加入这两个表时,我遇到了问题。 select * from tblemployee as e join tbllead as l 关于 e.id=l.LeadEmployees

获取:- 将数据类型 varchar 转换为 bigint 时出错。

我想要的结果应该包含除 4 之外的所有列值。 提前致谢...

【问题讨论】:

  • 坏习惯:不要按上述方式设计表格列
  • 指出这样的事情是令人讨厌的。他可能正在接管别人的工作

标签: sql sql-server


【解决方案1】:

这是一个适用于任何标准数据库的通用解决方案:

SELECT DISTINCT
    t1.ID
FROM tblemployee t1
INNER JOIN tbllead t2
    ON ',' + t2.leademployees + ',' LIKE '%,' + CONVERT(varchar(10), t1.ID) + ',%'
ORDER BY
    t1.ID;

这个查询使用了我第一次看到 @CL 使用的技巧,最好通过显示一些数据来解释。 tbllead的第一行有这样的数据:

1,2,6,7

内部数字和外部数字的比较是不同的,因为两边有一个逗号。但是如果我们在这个字符串周围连接逗号,我们会得到以下结果:

,1,2,6,7,

现在,我们可以将tblemployee 表中的每个ID(用逗号括起来)与每条记录上的员工列表进行比较。即比较,1,,2,等。

这是 SQL Server 的演示:

Demo

如果您使用的是 MySQL,上述查询会略有变化。此外,在 MySQL 中使用FIND_IN_SET 会有一个更严格的选项。但我给出的答案在我看来更有用,因为无论数据库如何,它都可以轻松应用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-06
    • 2020-10-02
    • 2021-10-13
    • 1970-01-01
    • 2010-11-06
    • 2015-10-12
    • 1970-01-01
    相关资源
    最近更新 更多