0

我有如下查询

select * from table1 where id in (select ids from table2 where id = 100)

如果我单独运行子查询,则子查询会返回 34、35、55、66 之类的输出。

但是我上面的查询给出了错误

Conversion failed when converting the varchar value '34,35,55,56' to data type int.

table1 中的 id 列是 int。我知道我可以在 2 个单独的查询中执行此操作,但如果有任何方法可以在单个查询中执行,请告诉我。提前谢谢了

4

1 回答 1

1

尽管我不知道 sql server 和关于这种结构的评论是不可取的,但你可以在 mysql 中使用以下方法进行操作,per this fiddle

select distinct id from table1 join table2 on find_in_set(id,ids)

更新:我刚刚意识到这并不反映table2拥有它自己的id字段并以此限制搜索。如果您需要帮助修改查询以适应,请告诉我,我会更新它和小提琴。

更新 2:这是一个蹩脚但可能有效的尝试,在 SQL Server 中使用其更有限的字符串设施,per this fiddle。如果有人知道find_in_setSQL Server 的更简单等价物,我很想知道它是什么。

select distinct id from table1 join table2 
  on patindex('%,'+cast(id as varchar)+',%',ids)>0 or
  patindex(cast(id as varchar)+',%',ids)>0 or
  patindex('%,'+cast(id as varchar),ids)>0 or
  patindex(cast(id as varchar),ids)>0
于 2013-06-24T13:18:29.710 回答