Нужен псевдоним Inner join столбец в MySQL - PullRequest
4 голосов
/ 10 августа 2011
SELECT AlertTypeID FROM incidentalert 
INNER JOIN incidentalerttype 
ON incidentalert.alerttypeid=incidentalerttype.AlertTypeID
WHERE IncidentID=111210

AlertTypeID - это столбец в таблице 1 и первичный ключ в таблице 2. Как я могу устранить неоднозначность?

Ответы [ 4 ]

5 голосов
/ 10 августа 2011

Попробуйте это:

SELECT 
    ia.AlertTypeID 
FROM
    incidentalert ia 
    inner join incidentalerttype iat on iat.alerttypeid=ia.AlertTypeID
where 
    ia.IncidentID=111210
2 голосов
/ 10 августа 2011

Ваш запрос должен быть подвергнут рефакторингу, а также псевдонимам таблиц.

Вот ваш исходный запрос:

SELECT AlertTypeID FROM incidentalert 
INNER JOIN incidentalerttype 
ON incidentalert.alerttypeid=incidentalerttype.AlertTypeID
WHERE IncidentID=111210;

Поскольку вы используете только один IncidentID, пытаясь получить его до того, как JOIN выполнитplace:

SELECT ia.AlertTypeID
FROM
    (SELECT AlertTypeID FROM incidentalert WHERE IncidentID=111210) ia
    INNER JOIN (SELECT AlertTypeID FROM incidentalerttype) iat USING (AlertTypeID)
;

Это должно выполняться намного быстрее по мере увеличения числа инцидентов.

Если вам нужны все столбцы из строки инцидента, измените их следующим образом:

SELECT ia.*
FROM
    (SELECT * FROM incidentalert WHERE IncidentID=111210) ia
    INNER JOIN (SELECT AlertTypeID FROM incidentalerttype) iat USING (AlertTypeID)
;

Попробуй !!!

2 голосов
/ 10 августа 2011

Просто полностью определите ссылку на столбец, добавив имя таблицы впереди.Рекомендуется сделать то же самое для столбца в предложении WHERE.Использование псевдонимов для имен таблиц также может облегчить чтение.

SELECT ia.AlertTypeID 
    FROM incidentalert ia
        INNER JOIN incidentalerttype iat
            ON ia.AlertTypeID = iat.AlertTypeID 
    WHERE ia.IncidentID = 111210
1 голос
/ 10 августа 2011

Просто поместите имя таблицы перед столбцом, как в операторе JOIN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...