2014-04-27 2 views
1

내가 표 A에있는 하위 쿼리와 선택 쿼리가 : 그에서 잘 작동다른 선택을 한 테이블에서 카운트를 가입 - mysql을

select UserName, Name, anniversaryDate, RegionCode 
from a where UserName in 
(
    select Username from 
    (
     select Username, max(timeUsed) 
     from log_table where role='Cou' 
     group by Username order by max(timeUsed) desc limit 10 
    ) a 
) 

, 지금은 다른 테이블 호출 한 B, 테이블 난 단지 3 열이 있습니다

사용자 이름, PNAME 및 피드백 각 사용자 이름을 여러 번이

를하고 난 내 첫 번째 쿼리에 내가 첫 번째 쿼리에서 가져온 각 사용자 이름의 수를 가입하려는. eaxmple에 대한

:

SELECT COUNT(UserName) FROM b where UserName='Admin' group by UserName 

어떻게 처음에 두 번째 쿼리의 결과에 가입합니까?

테이블 :

log_table :
ID - INT, AI, PK
자명 - VARCHAR
액션 - 지능
timeUsed - 날짜 시간
역할 -

varchat :
사용자 이름 - varchar, PK
이름 - varchar
anni versaryDate - 날짜 시간
RegionCode - 지능

B :
사용자 이름 - VARCHAR
PNAME - VARCHAR
피드백 - VARCHAR 쿼리 아래 당신이 찾고있는 필요한 열을 추가 할 수 있습니다 테이블 구조를 기반으로

+1

실제로 중첩 된 선택 항목 대신 조인을 사용해야합니다. 귀하의 테이블 구조를 공유하십시오, 그것은 우리가 당신을 도울 수있는 방법을 찾는 데 도움이 될 것입니다. – rekaszeru

+0

그 것이 사실입니다. 내 앱 (중첩 된 선택)에서 액션을 만든 마지막 10 명의 사용자를 얻고,이 사용자에 대한 기본 정보를 표 (주요 선택 항목)에서 가져와야합니다. 그들에게 테이블 b의 카운트를 더하십시오 – Kadosh

+0

알겠습니다. 이것을 정리해 주셔서 감사합니다. 귀하의 테이블 구조를 공유하는 상황을 재현하고 샘플을 제공하는 데 도움이 될 것입니다,하지만 당신 도이 방법으로 메타 답변을 할 수 있습니다 :) – rekaszeru

답변

0

for :

select users.UserName, Name, anniversaryDate, RegionCode, 
     Coalesce(count(b.UserName),0) as cnt 
    from users 
     left outer join (select Username, max(timeUsed) 
      from log_table where role='Cou' 
      group by Username order by max(timeUsed) desc limit 10 
     ) a using (UserName) 
     left outer join fedbacks b on (a.UserName = b.userName) 
     group by users.UserName; 
+0

어떤 이유에서 그것을 반환합니다 Cnt 0에 행이 있지만 테이블 b에서 사용자 이름이 – Kadosh

+1

인 role = 'Cou'입니까? 대소 문자를 구분합니다. – rekaszeru

+1

지금 작동, 값 중 하나를 변경하는 것을 잊었습니다 :) – Kadosh

관련 문제