2010-11-10 3 views
2

Je travaille sur mes devoirs et je n'arrive pas à trouver la bonne syntaxe pour la fonctionnalité "NOT IN".Quelle est la syntaxe correcte pour ce problème de jointure droit?

La base de données est une petite base de données d'assurance (transporteurs, membres, employeurs, régimes) constituée pour cette mission. Je suis supposé "Lister TOUS les transporteurs et le nombre de plans qu'ils ont (utiliser soit la jointure droite ou gauche) .Listez le carrier_id, carname, et le nombre de plans."

C'est ce que je l'ai écrit à partir de ce moment:

SELECT carrier_id, carname, count(*) AS NoPlans 
FROM carriers RIGHT JOIN plans 
ON carriers.carrier_id = plans.carrierid; 

Cette lance le « pas une fonction de groupe unique groupe » lorsque je tente de l'exécuter, mais c'est parce que je pense qu'il cherche une clause WHERE, et je ne sais pas quelle devrait être la condition.

structure de la table porteuse:

Name       Null  Type 
------------------------------ -------- ----------- 
CARRIER_ID      NOT NULL CHAR(4) 
CARNAME         CHAR(35) 
CARADDRESS        CHAR(50) 
CARCITY         CHAR(30) 
CARSTCODE        CHAR(2) 
CARZIP         CHAR(10) 
CARPHONE        CHAR(10) 
CARWEBSITE        CHAR(255) 
CARCONTACTFIRSTNAME      CHAR(35) 
CARCONTACTLASTNAME      CHAR(35) 
CARCONTACTEMAIL       CHAR(255) 

11 rows selected 

structure de la table Plans:

Name       Null  Type 
------------------------------ -------- ------------- 
PLANID       NOT NULL NUMBER 
PLNDESCRIPTION       CHAR(35) 
PLNCOST         NUMBER(8,2) 
CARRIERID        CHAR(4) 

4 rows selected 
+0

@Bob: [ "La balise de devoirs, comme les autres soi-disant balises 'méta', est maintenant découragé"] (http://meta.stackoverflow.com/q/ 10812) mais, @Jeff, s'il vous plaît (comme toujours) suivez [les directives générales] (http://tinyurl.com/so-hints): énoncez toutes les restrictions spéciales, montrez ce que vous avez essayé jusqu'ici, et posez des questions sur ce qui est spécifiquement Cela vous déroute. –

Répondre

2
SELECT carrier_id, carname, count(*) AS NoPlans 
    FROM carriers RIGHT JOIN plans 
    ON carriers.carrier_id = plans.carrierid 
GROUP BY carrier_id, carname; 
+0

'noPlans' va être le compte du' carname' par transporteur, pas le nombre de plans au transporteur. –

+0

@OMG: Je soupçonne que la question n'est pas bien formulée et c'est ce qui est attendu; votre réponse est peut-être un peu avancée? Mais @Scottie vous avez le point-virgule au mauvais endroit, même après l'édition de @ Justin. –

+0

Oups ... J'ai simplement copié et collé sa requête originale et ajouté le groupe par. J'ai oublié de modifier le point-virgule. Bonne prise. – Scottie

2

count exige une clause group by.

Vous devriez également considérer votre jointure. Il ne fait probablement pas tout à fait ce que vous attendez.

0
SELECT c.carrier_id, c.carname, count(1) as no_plans 
FROM carriers c RIGHT JOIN plans p 
ON c.carrier_id = p.carrierid 
group by c.carrier_id , c.carname 
0
SELECT carrier_id, carname, count(plans.PLANID) AS NoPlans 
FROM carriers LEFT JOIN plans 
ON carriers.carrier_id = plans.carrierid 
GROUP BY carrier_id, carname 
Questions connexes