SELECT AlertTypeID FROM incidentalert
INNER JOIN incidentalerttype
ON incidentalert.alerttypeid=incidentalerttype.AlertTypeID
WHERE IncidentID=111210
AlertTypeID是表1中的一列,表2中的主鍵。我該如何消除歧義?需要別名MySQL中的內連接列
SELECT AlertTypeID FROM incidentalert
INNER JOIN incidentalerttype
ON incidentalert.alerttypeid=incidentalerttype.AlertTypeID
WHERE IncidentID=111210
AlertTypeID是表1中的一列,表2中的主鍵。我該如何消除歧義?需要別名MySQL中的內連接列
試試這個:
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)
;
試試看!