9

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

4

4 に答える 4

25

サブクエリは複数の値を返すことができるため、INwhere 句に収まる必要があります。

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
于 2012-09-26T08:32:11.040 に答える
0
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)
于 2012-09-26T08:33:27.900 に答える
0

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

于 2012-09-26T08:31:49.697 に答える
0
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
于 2012-09-26T08:35:49.960 に答える