【发布时间】:2015-02-26 23:18:50
【问题描述】:
一个表 X 有一个列 C1 并具有用逗号分隔的值,即 1,2,3
另一个表Y 的列C2 具有唯一的tinyint 值并且具有多行,而列C2 的值是,即
1
2
3
4
5
要求:检查X(C1)的所有值是否都存在于Y(C2)表中
试过一个:
((select Data from dbo.split(X.C1,',')) in ((Select C2 from Y where <some condition>)))
其中 Split 是一个用户定义的函数,它基于“逗号”进行拆分并将其放入表的各个行并返回该表,即
Split(X.C1,',') 返回一个包含多行的表,如
1
2
3
但是,使用这个查询会产生运行时错误:
子查询返回超过 1 个值。这是不允许的,当 子查询遵循 =、!=、、>= 或当子查询用作 一个表达式。
请任何人帮助获得更可行的解决方案
提前致谢 基兰布萨
【问题讨论】:
-
发布您的完整查询。在您给定的查询中,没有异常运算符。
-
理想情况下,更改设计。 SQL 有一种设计 的数据类型,用于保存多个值并为处理这些值提供了很多支持——它被称为表。将多个值填充到一个字符串中,然后努力将它们作为单独的值使用,这不是由 SQL 的限制引起的,而是由使用错误的数据类型引起的。
标签: sql-server