このクエリを実行しようとすると、「エラー:#1242-サブクエリが複数の行を返します」というメッセージが表示されました。
SELECT id FROM postcodes WHERE pcd LIKE (SELECT CONCAT(pcd,' %') FROM towns WHERE id IN (31898,12828,15771,7604))
このクエリについて何か提案はありますか?
JOIN
IN
次のように、述語の代わりに2つのテーブル。
SELECT p.id
FROM postcodes p
INNER JOIN towns t ON p.pcd LIKE CONCAT(t.pcd,' %')
WHERE t.id IN (31898,12828,15771,7604);
このクエリを確認してください:
SELECT CONCAT(pcd,' %') FROM towns WHERE id IN (31898,12828,15771,7604)
たぶん、結果は複数の行になります。
または、サブクエリの結果を制限することもできます。
SELECT id FROM postcodes WHERE pcd LIKE (SELECT CONCAT(pcd,' %') FROM towns WHERE id IN (31898,12828,15771,7604) LIMIT 1)
サブクエリを1行に制限する必要があります。結果を1行に制限するためにいくつかのフィルターを追加するか、サブクエリに追加することLIMIT 1
でうまくいきます。