2010-03-17 3 views
12

LEFT JOIN과 같은 기능을 수행하려면 여러 컬럼이 필요한 subselect가 필요합니다. 다음은 무슨 뜻입니까.subselect를 사용하여 LEFT JOIN을 수행하십시오.

SELECT m.*, (SELECT * FROM model WHERE id = m.id LIMIT 1) AS models FROM make m 

이렇게하면 '피연산자에 1 개의 열이 있어야합니다'라는 오류가 표시됩니다.

예 LEFT JOIN에서는 이것이 가능하다는 것을 알고 있습니다. 그러나 그것이 어떻게 행해지는지 궁금해서 subselect로 가능하다고 들었습니다.

답변

7

subselect는 하나의 컬럼 만 리턴 할 수 있으 G로, 모델 테이블에서 리턴하고자하는 각 컬럼에 대해 하나의 subselect가 필요합니다.

+0

내가 원하는 방식으로는 아니지만. 이 쿼리는 여러 열을 반환합니다. SELECT. *, 모델. * FROM make m, (SELECT * FROM model LIMIT 1) AS 모델 – Andre

+1

하위 쿼리는 FROM 및 JOIN에서 둘 이상의 열을 반환 할 수 있습니다. SELECT 컨텍스트에서 스칼라로만 작업하기 때문에 하위 쿼리에서 하나의 값만 반환 할 수 있습니다. – MisterZimbu

+0

동의. 고맙습니다. – Andre

16

당신이 제안한 것을 실제적으로 많이 사용합니다.

있는 적어도 하나의 release_date로 만들를 위해이 가상 쿼리는 가장 최근의 release_date (인위적인 예)를 반환하고, 어떤 경우는 null없이 release_date으로합니다 나는 참으로 부속 선택에 여러 열을 반환 할 수

SELECT m.make_name, 
     sub.max_release_date 
    FROM make m 
     LEFT JOIN 
      (SELECT id, 
        max(release_date) as max_release_date 
       FROM make 
      GROUP BY 1) sub 
     ON sub.id = m.id 
관련 문제