2015-11-01 3 views
0

У меня есть эти данные нижеКак получить COUNT из нескольких таблиц?

TABLE 1 SID CAMBORROW  OTMARK 
      S1  CAM1   1 
      S2  CAM2   1 
      S3  CAM3   0 

TABLE 2 SID BOOKBORROW  OTMARK 
      S1  book1   1 
      S2  book2   0 
      S3  book3   0 

TABLE 3 SID  NAME   
      S1  SNAME1 
      S2  SNAME2 
      S3  SNAME3 

Теперь то, что я хочу сделать, это получить, сколько раз этот человек имеет OTMARK 1 на его/ее, а также группа его/ее имя. Это то, что я использую для запроса.

SELECT TABLE3.NAME,COUNT(*) 
FROM TABLE1,TABLE2,TABLE3 
WHERE TABLE3.SID = TABLE1.SID 
AND TABLE1.OTMARK = 1 
OR(TABLE3.SID = TABLE2.SID 
    AND TABLE2.OTMARK = 1) 
GROUP BY TABLE1.NAME 

В результате я получил далеко не то, что должно произойти. Я не знаю, в какой части я ошибался, поэтому мне нужна помощь. Заранее спасибо.

EDIT: Выход ожидать является

SNAME COUNT 
SNAME1 2 
SNAME2 1 
+0

Просьба показать ожидаемый результат – OldProgrammer

+0

@OldProgrammer отредактирован. Спасибо за головы. – DevArenaCN

ответ

1

Вы должны join таблицы с правильным join синтаксиса.

SQL Fiddle

SELECT t3.name, 
sum(nvl(t1.otmark,0)+nvl(t2.otmark,0)) 
FROM table3 t3 
left join table2 t2 on t2.sid = t3.sid and t2.otmark =1 
left join table1 t1 on t1.sid = t3.sid and t1.otmark =1 
where t1.otmark is not null or t2.otmark is not null 
GROUP BY t3.NAME 

Edit: Более простое решение было бы

SELECT t3.name, t1.otmark+t2.otmark 
FROM t3 
join t2 on t2.sid = t3.sid 
join t1 on t1.sid = t3.sid 
where t1.otmark > 0 or t2.otmark > 0 
+0

OTMARK здесь не ключи. Я хочу получить их отдельно, поэтому я могу пересчитать их дважды. – DevArenaCN

+0

@DevArenaCN vkp уже показал, как это сделать, сложно ли вам попробовать? – Adish

+0

@Adish Я попробовал, результат только получить меня 'sname count SNAME1 1' – DevArenaCN

0

Это ваш запрос:

Select table3.name SNAME,(table2.otmark+table1.otmark) COUNT 
From table3 
inner join table2 
on table3.sid=table2.sid 
inner join table1 
on table1.sid=table2.sid 
Where table1.otmark>0 
0

Вы должны союз TABLE1 и TABLE2 объединить результат.

SELECT t3.NAME, COUNT(*) 
FROM table3 AS t3 
LEFT JOIN 
    (SELECT SID, CAMBORROW AS ITEMBORROW, OTMARK 
    FROM table1 
    WHERE OTMARK = 1 
    UNION ALL 
    SELECT SID, BOOKBORROW AS ITEMBORROW, OTMARK 
    FROM table2 
    WHERE OTMARK = 1 
) AS t4 
ON t3.SID = t4.SID 
GROUP BY t3.NAME; 

Более подробная информация о синтаксисе UNION here.

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