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サーバーと、この種の構造が望ましくないというコメントについては知りませんが、このフィドルごとに、次のようにmysqlで実行できます。

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

table2更新:これは、独自のidフィールドを持ち、それに基づいて検索を制限することを反映していないことに気付きました。対応するためにクエリを変更するのに助けが必要な場合は、お知らせください。クエリとフィドルを更新します。

更新 2: このfiddleに従って、文字列機能がはるかに制限された SQL Server でこれを行うには、おそらく有効な試みがあります。SQL Server に相当する単純なものを誰かが知っている場合find_in_setは、それが何であるかを知りたいと思います。

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 に答える