web-dev-qa-db-ja.com

#1242-サブクエリが複数の行を返す-mysql

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-サブクエリが複数の行を返します」というエラーが表示されます。理由はわかりますが、その方法がわかりません。

5
Apostrofix

サブクエリは複数の値を返す可能性があるため、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
20
John Woo

等しい(=)の代わりに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を使用します

0
Prasanna
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)
0
PermGenError
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
0
AnandPhadke