2010-12-15 5 views
1

J'ai 2 tablesmysql left join problème

Table: Users 
     userid (int, PK) 
     name (varchar) 
     type (enum) 

Table: Sales 
     salesid (int) 
     productid (int) 
     userid (int, FK) 

je besoin d'une sortie comme

User Name         Sales Count 
    ABC           5 
    BCD           0 
    EFG           1 

J'ai besoin tous les utilisateurs de la table "utilisateurs" avec le type spécifique (comme a, b, c) et le nombre de ventes (si aucune vente, puis 0)

SELECT users.name 
     , count(sales.salesid) 
FROM users 
    LEFT JOIN sales 
    ON users.userid = sales.userid 
WHERE type = 'a' 

Le problème est question ci-dessus, il est seulement me montrant les utilisateurs qui ha ve ventes, je besoin de tous les utilisateurs de type spécifique, si elles ont des ventes ou non

Merci

+2

La jointure gauche ressemble à droite. Le type des lignes manquantes est-il différent de 'a'? –

+0

@bernd_k: les lignes sont là avec le type 'a' mais elles manquent encore –

Répondre

2

N'êtes-vous pas manquer la clause GROUP BY? Avec la plupart des dialectes SQL, vous en avez besoin, et dans le MySQL que j'utilise (il est vrai que c'est un peu vieux), il doit être là, ou vous obtenez une erreur. Ajoutez simplement "GROUP BY users.name" à la fin, et cela devrait fonctionner.

+0

merci, ça a marché –

1

essayer:

SELECT users.name, count(sales.salesid) 
FROM users 
    LEFT JOIN sales 
    ON (users.userid = sales.userid AND type = 'a') 
+0

Non, si vous mettez la coche pour le type dans la condition de jointure, cela gardera les utilisateurs qui ont d'autres types que 'un '. –