【发布时间】:2019-04-29 13:54:56
【问题描述】:
我有 2 张桌子。第一个表有一个列“EmployeeIds”,它是一个字符串,其中包含一组用逗号分隔的 ID(例如:“4124,2945,2873,4047,3046,4774”)。
第二个表有一个这些ID-s作为他的标识(EmployeeID),还有与这些ID-s相关的名字。
我想要一个选择,其中列出了 table1 中的所有内容,但不是 EmployeeIds 列中的 ID,我想查看连接到这些 ID 的名称。
SELECT name from Table2
WHERE EmployeeID CAST(EmployeeID AS int) IN (SELECT EmployeeIds FROM Table1)
我收到了错误:“将 varchar 值 '4124,2945,2873,4047,3046,4774' 转换为数据类型 int 时转换失败。”
我知道上面的代码不会返回我需要的一切,因为我还需要将它与 Table1 一起加入,但我正在从内到外工作,我已经被困在这里了。
【问题讨论】:
-
将一堆 Employid 存储在以逗号分隔的字符串中是个坏主意。您可以使用该字符串构建查询,但这不是一个好习惯。
-
我知道(table2 id-s 甚至不是 int 形式也很糟糕),但我们有一个我们现在必须使用的数据库,我无法更改数据库,现在只使用一些 SELECT :(
-
什么是后端数据库?
-
将逗号分隔的数据放入这样的列中是非常糟糕的架构设计。您确实需要一个额外的表,其中包含第一个表中的键字段和 只有一个 员工 ID 的字段。然后,您可以在新表中为每个 ID 分别记录,并使用简单的 JOIN 解决此问题。但我知道您可能无法通过弹指来修复(我说“修复”,因为当前架构确实损坏)现有系统。毕竟,我们并不都是灭霸。
标签: sql sql-server tsql