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

AlertTypeID是表1中的一列,表2中的主鍵。我該如何消除歧義?需要別名MySQL中的內連接列

回答

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

試試看!