SELECT AlertTypeID FROM incidentalert
INNER JOIN incidentalerttype
ON incidentalert.alerttypeid=incidentalerttype.AlertTypeID
WHERE IncidentID=111210
AlertTypeIDは表1の列で、表2の主キーです。どのようにすれば曖昧さを排除できますか?別名にする必要があります。
SELECT AlertTypeID FROM incidentalert
INNER JOIN incidentalerttype
ON incidentalert.alerttypeid=incidentalerttype.AlertTypeID
WHERE IncidentID=111210
AlertTypeIDは表1の列で、表2の主キーです。どのようにすれば曖昧さを排除できますか?別名にする必要があります。
この試してみてください:あなたのクエリはリファクタリングだけでなく、ここではテーブルに
エイリアシングされなければならない
SELECT
ia.AlertTypeID
FROM
incidentalert ia
inner join incidentalerttype iat on iat.alerttypeid=ia.AlertTypeID
where
ia.IncidentID=111210
表の前にテーブル名を追加するだけで、列参照を完全修飾するだけです。ベストプラクティスとして、WHERE
節の列についても同じことを行う必要があります。テーブル名にエイリアスを使用すると、読みやすくなります。
SELECT ia.AlertTypeID
FROM incidentalert ia
INNER JOIN incidentalerttype iat
ON ia.AlertTypeID = iat.AlertTypeID
WHERE ia.IncidentID = 111210
JOIN文の場合と同じように、列の前にテーブル名を配置するだけです。
はあなたの元のクエリです:
SELECT AlertTypeID FROM incidentalert
INNER JOIN incidentalerttype
ON incidentalert.alerttypeid=incidentalerttype.AlertTypeID
WHERE IncidentID=111210;
一つだけIncidentIDのために行くされているので、 JOINが行われる前に取得しようとしています:
SELECT ia.AlertTypeID
FROM
(SELECT AlertTypeID FROM incidentalert WHERE IncidentID=111210) ia
INNER JOIN (SELECT AlertTypeID FROM incidentalerttype) iat USING (AlertTypeID)
;
これはインシデントの数が増えるにつれ、はるかに高速に実行されるはずです。
あなたは次のようにincidentalert行のすべての列は、それを変更する必要がある場合:
SELECT ia.*
FROM
(SELECT * FROM incidentalert WHERE IncidentID=111210) ia
INNER JOIN (SELECT AlertTypeID FROM incidentalerttype) iat USING (AlertTypeID)
;
はそれを試してみます!