2016-12-26 13 views
0

私は、私が欲しいものを達成するためにどのような種類のSQLクエリを実行する必要がありますか?JOINEDクエリへのヘルプ/説明が必要

のは、私は3つのテーブルがあるとしましょう:

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つのレコードが含まれています。
  • weekly_reportには、旅行の1週間あたりのレポートが含まれています。 (2週間の1回の旅行には2つのレコード、1回の旅行または5週間には5 ..があります)。
  • インシデント・テーブルには、インシデントごとに1レコードが含まれています。 (インシデントが1週間発生した場合は、インシデントテーブルにレコードを作成します。それ以外の場合は何もしません)

私は単一のクエリ(または、サブクエリである必要がある場合) error_code "25456"のために宣言された事件が少なくとも1週間あった旅行の回数。

サンプルデータから期待される結果は2です(トリップ2と3にはエラーコード25456のインシデントが存在するため)。

私は必要に応じてさらに説明することができます、そこに誰かが私を助けて喜んでですか?

おかげで、

+1

mysql 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にもう1つの事件があった場合、あなたの答えは2の代わりに3を生成します。 – GurV