2013-05-29 2 views
5

Im 두 테이블을 조인하고자하지만 열심히 보일 수는 없습니다.두 테이블의 안쪽 조인을 사용하는 Mysql 계산, 평균 조인

표 1 (구성원) [UserLogin | 이름]

표 2 (기사) [ArtID | 작가 | 내용] Article.writer가 Members.UserLogin을 가리키고 있습니다.

가능한 한 적은 코드로 등록 된 UserLogins의 전체 목록과 작성한 기사의 수 또는 개수를 표시하고 싶습니다. 그들은 아직 목록에 있어야하는 것은 없습니다.

내가 좋아하는 것 : [UserLogin | 이름 |

SELECT UserLogin, Name, Writer, count(*) 
FROM Article 
INNER JOIN Members on Writer=UserLogin 
GROUP BY UserLogin; 

또는

SELECT UserLogin, Name, count(Writer) 
FROM Article 
LEFT JOIN Members ON UserLogin = Writer 
GROUP BY 1; 

둘은, MySQL은 괜찮 모든 것을 나열하지만, ​​그들 중 누구도는 UserLogins과 사람들의 이름을 포함하지 않는다 : ArticlesWritten] I've가 지금까지 가지고 무엇

입니다 누가 어떤 기사도 쓰지 않았다. 너희들이 나를 올바른 방향으로 가르 칠 수 있니? 내 쿼리에 대한 문제를 이해하지만 해결 방법에 대해서는 잘 모릅니다.

이 포럼에서도 비슷한 문제가 발견되었지만 해결책은 없습니다. 언어 배리어 또는 기본 mysql 지식이 부족할 수도 있습니다.

+2

'작가 "'"을 가리키는 "이름"외래 키이다 "- 그것은'Article.writer'은 테이블에'Article'은에 의존 Members.UserLogin''가리키는되지 테이블'회원'? –

+0

네, 그게 무슨 뜻인지, 편집합니다. 미안 ... –

답변

6

그냥 LEFT JOIN 상호 교환 테이블 이름 사용

SELECT UserLogin, Name, count(Writer) 
FROM Members 
     LEFT JOIN Article on Writer = UserLogin 
GROUP BY UserLogin, Name 
조인에 대해 더 친절하게 아래의 링크를 방문, 더 많은 지식을 얻기 위해

: 귀하의 질문에

당신은 "외래 키는"작가 "를 가리키는"이름 "입니다, 테이블 Article이 테이블 Members에 종속되는 것은 writer is pointing to UserLogin이 아닙니까?

+0

나는 네 답을 간결하게하고 너에게 나에게 위대한 독서를 줬다. 매력처럼 작동하고, 정보가 실수를하더라도 내 의도를 이해하는 것이 좋습니다. 많은 감사드립니다! 문서/회원 쿼리를 작성하는 동안 누군가가 더 많은 정보를 얻길 바랍니다. –

+0

':)' –

11

당신은 하위 쿼리

샘플 출력을 사용할 수 있습니다

| USERLOGIN | NAME | ARTICLESWRITTEN | 
--------------------------------------- 
|  user1 | Jhon |    2 | 
|  user2 | Helen |    0 | 

여기 SQLFiddle

+0

글쎄, 들어 보자. 아래 표는 무엇입니까? – peterm

+0

여기'Writer = m.Name'은'm.UserLogin'이 올 것입니다 –

+0

@DevalShah OP의 정확한 단어 * ... 외래 키는 "Writer"를 가리키는 "Name"입니다 ... * – peterm

2
SELECT 
    m.UserLogin, 
    m.Name, 
    (SELECT 
    COUNT(a.ArtID) 
    FROM Article a 
    WHERE a.Writer = m.UserLogin) AS ArticlesWritten 
FROM Members m 
0

이 시도입니다.

SELECT m.UserLogin,m.Name,COUNT(a.ArtID) FROM Members m LEFT JOIN Article a ON a.Writer=m.Name GROUP BY m.Name;