SQL JOINING TABLE QUERY

时间:2015-03-23 18:14:20

标签: sql oracle

我必须计算一下麻雀翼的房间数量。我有WING的表格和BEDROOMS的表格。卧室桌子有wing_id作为外键,我在加入桌子时遇到了麻烦。

这是我到目前为止尝试的查询 -

SELECT BEDROOM_ID, COUNT(*) 
FROM BEDROOMS 
WHERE WING_ID =
(
    SELECT WING_NAME
    FROM WING
    WHERE WING_NAME='SPARROW'
)
GROUP BY WING_NAME;

收到错误 - 不是GROUP BY表达式。有谁知道我怎么做这个工作?

4 个答案:

答案 0 :(得分:2)

这可以为您提供SPARROW翼楼的卧室数量:

SELECT COUNT(*) 
  FROM BEDROOMS   B,
       WING       W
 WHERE W.WING_NAME = 'SPARROW'
   AND B.WING_ID = W.WING_ID;

根据你的要求,你似乎不需要一个小组。 但是,您收到错误的原因是您尝试选择" BEDROOM_ID"但是,BEDROOM_ID不在您的GROUP BY子句中。

答案 1 :(得分:1)

如果它不在GROUP BY子句中,则不能在SELECT子句中使用BEDROOM_ID。此外,由于您将WING_ID与WING NAME进行比较,因此此查询无效。 此外,我不认为你甚至需要使用GROUP BY来计算这个数量。

SELECT 'SPARROW', COUNT(BEDROOM_ID) 
FROM BEDROOMS INNER JOIN WING
ON(BEDROOMS.WING_ID = WING.WING_ID)
WHERE WING_NAME='SPARROW'

答案 2 :(得分:0)

在编写查询之前,请考虑要选择和显示的内容。你告诉我们你想要计算麻雀翼的卧室。那你为什么要在查询中选择bedroom_id呢?您会在翼楼的所有卧室中看到哪个卧室ID?

然后从卧室中选择机翼ID是有问题的那个。但是在子查询中你不能选择机翼ID,而是机翼名称(当然是“SPARROW'”)。我想这只是一个错字,对吧?

然后按wing_name分组。因此,每个翼名称可获得一条记录。但是你只选择一个翼的记录(SPARROW),所以GROUP BY子句没有做任何有用的事情。此外,你在卧室查询中使用它,但卧室表没有列wing_name,所以无论如何你不能按它分组。

这是您的查询已清理:

select count(*) 
from bedrooms 
where wing_id =
(
  select wing_id
  from wing
  where wing_name = 'SPARROW'
);

你也可以选择min(bedroom_id),max(bedroom_id),文字' SPARROW'等。

如果你想从桌翼选择列,那么选择翼并在卧室上使用子查询:

select 
  wing_name, 
  wing_size,
  (select count(*) from bedrooms b where b.wing_id = w.wing_id) as rooms
from wing w 
where wing_name = 'SPARROW';

答案 3 :(得分:0)

试试这个:

SELECT W.WING_NAME AS WING,COUNT(B.WING_ID) AS BED
 FROM WING W JOIN BEDROOM B
  ON W.WING_ID=B.WING_ID
GROUP BY B.WING_ID;