2014-01-13 2 views
0

이 것은 약간의 설명이 있지만, 적어도 설명해야합니다. 요점을 이해하지 않으면 화를 내지 마십시오. 내 가난한 설명으로.의존성이있는 다른 SELECT 인 결과에 열을 추가하십시오.

메인 레코드의 id에 맞는 다른 테이블의 행 수를 나타내는 메인 SELECT에서 하나 이상의 열을 가져오고 싶습니다.

그래서 내가 선택한 주 테이블을 상상해보십시오. 간단히 메인이라고 부릅니다.

SELECT * FROM main ORDER BY c1 ASC LIMIT 5 

플러스 나는 ID를 일치 측면 테이블에서 행의 수를 말한다 반환 된 각 행에 대해 하나의 여분의 열을 필요

, 기본적으로 내가 주요에서 선택 할 수 있습니다 :

SELECT COUNT(*) FROM side WHERE m_id = main_id 

은 어쩌면 예를 들어 당신에게 조금 말할 것보다

 id data1 data2   id m_id ... 
main ----|-------|------- side -----|------|----- 
     1  aa  ab    1  1  
     2  xx  yy    2  2 
     3  az  bz    3  1 
            4  1 
            5  3 
            6  2 
            7  1 
            8  1 
            9  2 

expected result: 
id data1 data2 num 
----|-------|-------|------ 
    1  aa  ab  5 
    2  xx  yy  3 
    3  az  bz  1 

답변

1

수를 추가하는 간단한 방법은 상관 하위 쿼리입니다 :

SELECT m.*, 
     (select count(*) from side s where s.m_id = m.main_id) as side_cnt 
FROM main m 
ORDER BY c1 ASC 
LIMIT 5; 

당신은 또한 from 절을 변경하여이 작업을 수행 할 수 있습니다. 그러나이 메서드는 쿼리의 select 부분에만 영향을줍니다.

+0

감사합니다. 나는 그것이 어떻게 부름 받았는지, 어떻게 기술 할지를 알지 못했기 때문에 내가 과거에 어떻게했는지 기억하지 못하고 그물에서 그것을 발견 할 수 없었기 때문에 나는 그것에 대해 너무 화가났다. 지금 나는 그렇게 어리 석다. :) – notnull

0

당신은 하위 쿼리로 수행 할 수 있어야한다 :

SELECT m.*, (SELECT COUNT(*) FROM side WHERE m_id = m.main_id) as num FROM main m ORDER BY c1 ASC LIMIT 5 

이것은 기본적으로 일치하는 결과의 수를 계산하고 "NUM"컬럼에 표시 각 결과에 대한 특별한 쿼리를 실행합니다.

관련 문제