2016-12-26 3 views
0

Я как бы потерял какой SQL-запрос я должен сделать для достижения того, чего хочу.Нужна помощь/пояснение к СОЕДИНЕННОМУ запросу

Скажем, у меня есть три таблицы:

select * FROM trip; 

| trip_id | title | description 
---------------------------------- 
| 1  | title1 | desc1  | 
| 2  | title2 | desc2  | 
| 3  | title3 | desc3  | 
| 4  | title4 | desc4  | 
| 5  | title5 | desc5  | 
| 6  | title6 | desc6  | 

select * FROM weekly_report; 

| report_id | trip_id| incident_id 
---------------------------------- 
| 1   | 1  | (null)  | 
| 2   | 1  | (null)  | 
| 3   | 1  | 1   | 
| 4   | 2  | 2   | 
| 5   | 3  | 3   | 
| 6   | 3  | (null)  | 


select * FROM incident; 

| incident_id | error_code | 
---------------------------------- 
| 1   | 22223  | 
| 2   | 25456  | 
| 3   | 25456  | 

Так что для маленького operationnal знания:

  • Таблица поездки содержит 1 запись на поездку сделанного клиента.
  • Еженедельный отчет содержит отчет за неделю поездки. (1 поездка 2 недели будет иметь 2 записи, 1 поездка или 5 недель будет иметь 5 ..).
  • Таблица инцидентов содержит 1 запись за инцидент. (Если инцидент произошел в течение недели: мы создаем запись в таблице инцидентов, иначе мы ничего не делаем)

Я хотел бы найти в одном запросе (или, если это необходимо, с подзапросами) количество поездок, в которых, по крайней мере, на неделю произошел инцидент, объявленный для error_code «25456».

Ожидаемый результат из данных образца: 2 (потому что для отключения 2 и 3 существует инцидент с кодом ошибки 25456).

Я могу объяснить больше, если потребуется, есть ли кто-нибудь, кто хочет помочь мне?

Спасибо,

+1

mysql or oracle? – GurV

ответ

0

Вы должны принять кол-различных поездок для связанных инцидентов

select count(distinct w.trip_id) 
from weekly_report w 
inner join incident i 
on w.incident_id = i.incident_id 
where i.error_code = 25456; 
+0

Кажется, что это делается! Я собираюсь изучить внутреннее соединение, чтобы понять это! Спасибо! – lilli

0

Попробуйте это:

SELECT w.trip_id 
FROM incident i 
INNER JOIN weekly_report w ON i.incident_id=w.incident_id 
WHERE error_code='25456' 

и если вы хотите, подсчет, то

SELECT COUNT(w.trip_id) 
FROM incident i 
INNER JOIN weekly_report w ON i.incident_id=w.incident_id 
WHERE error_code='25456' 
+0

Не будет работать с другим набором данных – GurV

+0

@GurwinderSingh Не могли бы вы быть более ясными? –

+0

Если бы был еще один инцидент для поездки 2, ваш ответ произведет 3 вместо 2 – GurV