2013-05-29 9 views
5

Jestem chętny do połączenia dwóch tabel, ale nie wydaje się, aby to prawo, struktura wygląda tak.Liczba mysql z Wewnętrzne połączenie dwóch tabel, średnia Dołącz

Tabela 1 (członkowie) [UserLogin | Nazwa]

Tabela 2 (artykuły) [ArtID | Writer | Treść] Article.writer wskazuje na Members.UserLogin

Chcę wyświetlać z jak najmniejszym kodem, jak to możliwe, całą listę zarejestrowanych UserLogins, ale także liczbę, ile mogą napisać, lub jeśli mają Nie napisano ich jeszcze powinny być na liście również.

Co chciałbym: [UserLogin | Nazwa | ArticlesWritten]

Co Ive got tak daleko jest:

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

lub

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

Obaj wymienia wszystko dobrze w mysql, ale żaden z nich nie zawiera UserLogins i nazwiska osób który nigdy nie napisał żadnego artykułu. Czy możecie wskazać mi właściwy kierunek. Rozumiem problem z moimi pytaniami, ale nie mam pojęcia, jak go rozwiązać.

Znalazłem podobne problemy na tym forum, ale nie mam z nich żadnego rozwiązania. Może być barbierem językowym lub zwykłym brakiem podstawowej wiedzy mysql.

+2

'" klucz obcy jest «Nazwa», który jest skierowany do «Writer» '- prawda' Article.writer' wskazuje na 'Members.UserLogin' w której tabeli' Article' jest zależna od tabela "Członkowie"? –

+0

Tak, to co mam na myśli, będzie edytować. przepraszam ... –

Odpowiedz

6

wystarczy użyć LEFT JOIN punktem wymiany nazw tabel,

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

Aby dodatkowo zdobyć więcej wiedzy o przyłącza, prosimy odwiedzić poniższy link:

w swoim pytaniu Państwo stwierdzacie, "klucz obcy to" Nazwa ", który wskazuje" Writer ", czy nie jest to writer is pointing to UserLogin, w którym tabela Article jest zależna od tabeli Members?

+0

Bardzo podoba mi się twoja odpowiedź, zwięzła i dałeś mi świetną lekturę. Działa jak urok i dobrze, że zrozumiałeś moją intencję, chociaż informacje miały w tym błąd ... Wielkie dzięki! Mam nadzieję, że ktoś więcej się z tego nauczy, robiąc zapytania do artykułów/członków. –

+0

Cieszę się, że słyszę, że ':)' –

11

Można użyć podzapytania

wyjście próbki:

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

Oto SQLFiddle

+0

Cóż, posłuchajmy tego. Co to jest głosowanie w dół? – peterm

+0

'Writer = m.Name' tutaj' m.UserLogin' przyjdzie –

+0

@ Dokładna nazwa słowa OPE "Prawidłowy" * ... klucz obcy to "Nazwa", która wskazuje "Pisarz" ... * – 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

Spróbuj tego.

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