2013-04-26 23 views
-2

我的目标是创建一个关于该分支城镇管理的房产的视图,房产详情以及对这些房产进行的检查次数。我想我已经做出了正确的SELECT查询,但我无法将它们连接在一起。加入我的陈述

我使用的表是

  1. YR_property - 主键 - 'propertynum',外国密钥 - branchnum
  2. YR_branch - 主键 - branchnum
  3. YR_inspection - 主键1 - propertynum,主关键2 - 数据检查。

这是我成功...

SELECT area, city 
From YR_branch 

SELECT propertynum, COUNT (propertynum) FROM yr_inspection 
GROUP BY propertynum 

SELECT propertynum, branchnum, area, city, postcode, prop_type, rooms 
FROM YR_property 

要重申,我想加入的SELECT语句。感谢您可能收到的任何帮助!

+0

你有没有尝试过任何声明,看看你是否可以得到它的工作方式? – 2013-04-26 14:02:45

+0

在我把第三个表格放在我试过的地方... INNER JOIN yr_inspection ON YR_branch.branchnum = yr_inspection.propertynum; – 2013-04-26 14:04:48

回答

1

这里是一个解决方案:

select p.propertynum, p.branchnum, p.area, p.city, p.postcode, p.prop_type, p.rooms, 
     b.area, b.city, coalesce(i.NumInspected, 0) 
from yr_property p join 
    yr_branch b 
    on p.branchnum = b.branchnum left outer join 
    (select propertynum, count(*) as NumInspected 
     from yr_inspection i 
     group by propertynum 
    ) i 
    on i.propertynum = p.propertynum; 

它使用ANSI标准连接语法带来的表一起。检查表首先在连接之前汇总以获得对该属性的检查次数。

left outer join确保所有属性都包含在内,即使没有检查。 coalesce()显示在这种情况下检查的次数为0而不是NULL。

如果你真的想要一个SQL视图,那么只需在select之前放create view <your view name here> as即可。

+0

谢谢,非常感谢! – 2013-04-26 16:02:29

1

第一个和第三个查询可以用一个简单的JOIN合并。然后你可以通过使用子选择来合并第三个。像这样的东西应该工作:

SELECT * FROM (
    SELECT propertynum, COUNT (propertynum) 
    FROM yr_inspection GROUP BY propertynum 
) a, 
(
    SELECT b.area, b.city, p.propertynum, p.branchnum, 
      p.area, p.city, p.postcode, p.prop_type, p.rooms 
    FROM YR_property p, YR_branch b 
    WHERE p.branchnum = b.branchnum 
) b 
where a.propertynum = b.propertynum; 
+0

谢谢。然而它说ORA-00918:列明确定义 – 2013-04-26 14:19:49