sql in子句问题

vwkv1x7d  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(377)

这个问题在这里已经有答案了

在where子句的字符串列表中分析逗号分隔的字符串(3个答案)
10个月前关门了。
我在表x中有下面的一列,其中sharedbagsids包含字符串(1,3,4)
我正在尝试编写一个包含in子句的sql查询,如下所示

select * from .... where id in (x.SharedBagsIds)

但是这条线 id in (x.SharedBagsIds) 正在生成错误 Conversion failed when converting the varchar value '1,3,4' to data type int. 有办法解决这个问题吗?

a8jjtwal

a8jjtwal1#

这不是 IN 子句,并且您正在比较一个整数(您的 id )到字符串( '1,3,4' ). 您需要将列值拆分为多个值,然后检查id是否与以下任何值匹配:

WHERE (',' + RTRIM(SharedBagsIds) + ',') LIKE '%,' + @id + ',%'

看看这个答案。
或者考虑将sharedbagsid提取到自己的表中,在数据库字段中存储逗号分隔的值并不理想。

unguejic

unguejic2#

你的表格不是第一范式,即每个单元格都应该是原子的sharedbagsids'包含多个值,应始终避免使用这些值。阅读sql中的多对多关系,并相应地修改表。
假设我有一个表teacher和另一个表student,然后为了显示它们之间的关系,创建另一个表,其中包含teacherid和studentid作为复合主键。因此,您可以显示单个Map,而无需在单个单元格中放置多个ID,如1、3、4。
希望这有帮助。

相关问题