これを試してください:http://www.sqlfiddle.com/#!2/f6be7/4
select x.Name, COUNT(p.Name)
from
(
SELECT 'JOHN' AS NAME
UNION
SELECT 'PAUL'
) as x
LEFT JOIN Person p ON p.Name LIKE CONCAT('%',x.NAME, '%')
GROUP BY x.Name
サンプルデータ:
create table person
(
name varchar(100)
);
insert into person values
('JOHN LENNON'),
('WINSTON JOHN LENNON'),
('MICHAEL JOHN FOX'),
('PAUL McCartney'),
('SEAN PAUL DATA'),
('GREAT PAUL OF FIRE'),
('ST PAUL OF X');
出力:
NAME COUNT(P.NAME)
JOHN 3
PAUL 4
GEORGE を数えたい場合は、UNION に追加するだけです。
select x.Name, COUNT(p.Name)
from
(
SELECT 'JOHN' AS NAME
UNION
SELECT 'PAUL'
UNION
SELECT 'GEORGE'
) as x
LEFT JOIN Person p ON p.Name LIKE CONCAT('%',x.NAME, '%')
GROUP BY x.Name
出力:
NAME COUNT(P.NAME)
GEORGE 0
JOHN 3
PAUL 4
残念ながら、MySQL には unnest 機能がありません。Postgresql を使用すると、物事はより簡単になります: http://www.sqlfiddle.com/#!1/87c74/5
select x.Name, count(p.Name)
from
unnest(array['John','Paul','George']) as x(Name)
left join Person p ON p.Name ilike concat('%',x.Name, '%')
group by x.Name
サーバー側言語のコンマ区切り文字列を Postgresql に直接使用することもできます。そのコンマ区切り文字列を中括弧で囲むだけです: http://www.sqlfiddle.com/#!1/87c74/17
select x.Name, count(p.Name)
from
unnest('{John,Paul,George}'::text[]) as x(Name)
left join Person p ON p.Name ilike concat('%',x.Name, '%')
group by x.Name
これはPostgresqlでも機能し、値リストはクエリで直接使用できます(一方、MySQLでは、値リストはDDLでのみ使用できます):http://www.sqlfiddle.com/#!1/87c74/9
select x.Name, count(p.Name)
from
(values('John'),('Paul'),('George')) as x(Name)
left join Person p ON p.Name ilike concat('%',x.Name, '%')
group by x.Name
FROM 句の値リストは Microsoft Sql Server でも機能します: http://www.sqlfiddle.com/#!3/87c74/3