2013-04-26 3 views
-2

Моя цель - создать ПРОСМОТР по свойствам, управляемым с городом филиала, сведениями о свойствах и количеством проверок, выполненных для этих свойств. Я думаю, что я сделал правильные запросы SELECT, но у меня возникли проблемы с их объединением.Подпишитесь на мои заявки на выбор

Таблицы Я использую является

  1. YR_property - первичный ключ - 'propertynum' иностранного Key- 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 

Повторюсь, я пытаюсь присоединиться к ЗЕЬЕСТ. Спасибо за любую помощь, которую я могу получить!

+0

Вы пробовали какие-либо заявления, чтобы узнать, можете ли вы заставить его работать, как вы хотите? –

+0

до того, как я поставил третью таблицу в пробовал ... INNER JOIN yr_inspection ON YR_branch.branchnum = yr_inspection.propertynum; –

ответ

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-представление, просто поставьте create view <your view name here> as перед select.

+0

СПАСИБО, высоко ценим! –

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: столбец двусмысленно определен –

Смежные вопросы