2012-09-26 1 views
4

MySQL 데이터베이스에서 이미지 이름을 선택하는 select 문을 만들려고합니다. 테이블 이름은 - pictures_archive입니다. 나는 또한 가지고있는 종류에 따라서이 그림을 선정하는 것을 시도하고있다. 코드는 다음과 같습니다.# 1242 - 하위 쿼리가 1 행 이상을 반환 함 - mysql

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 - 하위 쿼리가 1 행 이상을 반환합니다."오류가 발생합니다. 나는 왜 그런지 알 수 있지만 그것을하는 법을 이해할 수는 없다.

답변

17

사이에 가입하면 절, IN이 youy에 맞게해야한다.

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 
+1

감사합니다! 그것으로 해결됩니다. – Apostrofix

+0

@ user1699611 당신은 오신 것을 환영합니다! –

+0

뭔가 비슷한 걸로 붙어 있었어. 고마워. – aashima

0

사용하는 대신 등호 (=)

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 개 테이블

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) 
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