したがって、基本的に私が現在抱えている問題は、SQL Server で高度な JOIN クエリを実行する方法がわからないことです。
次のテーブルがあります。
- 事件
- 結果
- インシデント_結果 (結合)
- 重大度
私のクエリは、データベースから各インシデント レコードを取得し、その重大度を決定する必要があります。これは、インシデントに関連付けられている結果 (結合テーブル、incident_consequence 内) を介して行われます。各結果レコードには、重大度の外部キーが関連付けられています。インシデントに関連するすべての結果を取得したら、severity.level の整数値が最も高い結果のみを返す必要があります。
ここでご覧になっているように、すべての関係については、incident_consequences.incident_id をincidents.id テーブルに結合し、そこから、incident_consequence.consequence_id を results.id に結合し、次に重大度を results.severity に結合する必要があります。 .
私はこれを行うのに多くの問題を抱えています.SQLをよく知っている賢い人がこのクエリで私を助けてくれることを願っています.
これが私がこれまでに持っているものです:
SELECT DISTINCT dbo.incidents.id, MAX(severities1.[level]) AS severities
FROM dbo.incidents
INNER JOIN dbo.incident_consequence
ON dbo.incidents.id = dbo.incident_consequence.incident_id
INNER JOIN dbo.consequences
ON dbo.incident_consequence.consequence_id = dbo.consequences.id
INNER JOIN dbo.severities AS severities1
ON dbo.consequences.severity = severities1.id
LEFT OUTER JOIN dbo.severities AS severities2
ON severities1.id = severities2.id AND severities1.[level] < severities2.[level]
WHERE (severities2.id IS NULL)
GROUP BY dbo.incidents.id, severities1.[level]
これは以下を返します:
私が必要とするのは:
これで得られる助けに本当に感謝します!
乾杯、ベン