MySQLデータベースから画像名を選択するselectステートメントを作成しようとしています。テーブルは--pictures_archiveと呼ばれます。また、カテゴリーに応じてこれらの写真を選択しようとしています。コードは次のとおりです。
SELECT pictures_archive_filename FROM pictures_archive
WHERE pictures_archive_id = (SELECT pictures_archive_id
FROM pictures_archive_category WHERE pictures_category_id = 9)
「#1242-サブクエリが複数の行を返します」というエラーが表示されます。理由はわかりますが、その方法がわかりません。
サブクエリは複数の値を返す可能性があるため、IN
はyouywhere句に収まるはずです。
SELECT pictures_archive_filename
FROM pictures_archive
WHERE pictures_archive_id IN
(
SELECT pictures_archive_id
FROM pictures_archive_category
WHERE pictures_category_id = 9
)
これに代わる方法は、両方のテーブルをjoin
することです。これはより効率的です。
SELECT pictures_archive_filename
FROM pictures_archive a
INNER JOIN pictures_archive_category b
ON a.pictures_archive_id = b.pictures_archive_id
WHERE b.pictures_category_id = 9
等しい(=)の代わりにINを使用する
SELECT pictures_archive_filename FROM pictures_archive
WHERE pictures_archive_id IN (SELECT pictures_archive_id
FROM pictures_archive_category WHERE pictures_category_id = 9)
または、可能であれば、2つのテーブル間でJOINを使用します
SELECT pictures_archive_filename FROM pictures_archive
WHERE pictures_archive_id = (SELECT pictures_archive_id
FROM pictures_archive_category WHERE pictures_category_id = 9 LIMIT 1)
SELECT p.pictures_archive_filename FROM
pictures_archive p inner join pictures_archive_category pc
on p.pictures_archive_id = pc.pictures_archive_id
where pc.pictures_category_id=9