【问题标题】:SQL IN Clause issue when comparing values [duplicate]比较值时出现 SQL IN 子句问题 [重复]
【发布时间】:2020-10-09 14:46:23
【问题描述】:

我在表 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.

有没有办法解决这个问题?

【问题讨论】:

  • 1,3,4 不是整数。您需要首先将它们分离为各自的值。是 134 还是 1 和 3 和 4 。
  • id 是 int,因此它会尝试将另一个操作数转换为该类型。试试select * from .... where CONVERT(id AS VARCHAR) in (x.SharedBagsIds)

标签: c# sql asp.net asp.net-mvc entity-framework


【解决方案1】:

这不是IN 子句的使用方式,而是将整数(您的id)与字符串('1,3,4')进行比较。您需要将列值拆分为多个值,然后检查 id 是否与任何值匹配:

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

this answer

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

【讨论】:

    【解决方案2】:

    您的表格不是第一范式,即每个单元格都应该是原子的。 'SharedBagsIds' 包含多个值,应始终避免。阅读 SQL 中的多对多关系并相应地修改表。

    假设我有表 Teacher 和另一个表 student,那么为了显示它们之间的关系,创建另一个表,其中包含 Teacherid 和 studentid 作为复合主键。因此,您可以显示单独的映射,而无需在单个单元格中放置多个 id,例如 1、3、4。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      相关资源
      最近更新 更多