2011-08-10 18 views
4
SELECT AlertTypeID FROM incidentalert 
INNER JOIN incidentalerttype 
ON incidentalert.alerttypeid=incidentalerttype.AlertTypeID 
WHERE IncidentID=111210 

AlertTypeIDは表1の列で、表2の主キーです。どのようにすれば曖昧さを排除できますか?別名にする必要があります。

答えて

5

この試してみてください:あなたのクエリはリファクタリングだけでなく、ここではテーブルに

エイリアシングされなければならない

SELECT 
    ia.AlertTypeID 
FROM 
    incidentalert ia 
    inner join incidentalerttype iat on iat.alerttypeid=ia.AlertTypeID 
where 
    ia.IncidentID=111210 
2

表の前にテーブル名を追加するだけで、列参照を完全修飾するだけです。ベストプラクティスとして、WHERE節の列についても同じことを行う必要があります。テーブル名にエイリアスを使用すると、読みやすくなります。

SELECT ia.AlertTypeID 
    FROM incidentalert ia 
     INNER JOIN incidentalerttype iat 
      ON ia.AlertTypeID = iat.AlertTypeID 
    WHERE ia.IncidentID = 111210 
1

JOIN文の場合と同じように、列の前にテーブル名を配置するだけです。

2

はあなたの元のクエリです:

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) 
; 

はそれを試してみます!

関連する問題