HumanTable name LangCodeList ---- ------------ aaaa 1,2,3,4,5 bbbb 1 cccc 1,3,5 dddd 2,3,4 eeee 4,5 LangTable LangCode LangName -------- --------- 1 C++ 2 C# 3 Python 4 Java 5 PHP C#やPythonといった検索ワードが指定されるので その言語のコードを、LangCodeListに持つ人のnameを表示する 出力結果 (Pythonが検索ワードの場合) name ---- aaaa cccc dddd
create table HumanTable( name varchar(4), LangCodeList varchar(100)); insert into HumanTable values('aaaa' , '1,2,3,4,5'), ('bbbb' , '1'), ('cccc' , '1,3,5'), ('dddd' , '2,3,4'), ('eeee' , '4,5'); create table LangTable( LangCode int, LangName varchar(10)); insert into LangTable values(1,'C++'), (2,'C#'), (3,'Python'), (4,'Java'), (5,'PHP');
-- ■■■ Exists述語を使う方法 ■■■ select name from HumanTable a where exists(select 1 from LangTable b where b.LangName = 'Python' and Find_In_Set(b.LangCode , a.LangCodeList)); -- ■■■ スカラーサブクエリを使う方法 ■■■ select name from HumanTable a where Find_In_Set((select b.LangCode from LangTable b where b.LangName = 'Python') , a.LangCodeList);
Exists述語を使う方法が 分かりやすいと思います。