这个正确的连接问题的正确语法是什么?

时间:2010-11-10 19:19:55

标签: sql oracle join

我正在完成我的作业,并且无法找出“NOT IN”功能的正确语法。

该数据库是一个小型保险数据库(运营商,成员,雇主,计划),用于此项任务。我应该“列出所有运营商和他们拥有的计划数量。(使用右或左连接)。列出carrier_id,carname和计划数。”

这就是我现在所写的:

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

当我尝试运行它时会抛出“不是单组组函数”错误,但那是因为我认为它正在寻找一个WHERE子句,我不知道应该是什么条件。

承运人表结构:

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

计划表格结构:

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

4 rows selected

4 个答案:

答案 0 :(得分:2)

count需要group by条款。

您还应该考虑加入。它可能没有达到你期望的效果。

答案 1 :(得分:2)

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

答案 2 :(得分: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

答案 3 :(得分: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