2013-04-26 25 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