MySQL: использование псевдонима внутри условия объединения

#mysql #sql

#mysql #sql

Вопрос:

 SELECT t1.*, IFNULL(t2.profile_id, t3.profile_id) AS `profile_id`
FROM table1 AS t1
LEFT JOIN table2 AS t2
    ON t1.id = t2.some_coulmn
LEFT JOIN table3 AS t3
    ON t1.id = t3.some_coulmn
LEFT JOIN table4 AS t4
    ON profile_id = t4.some_column
  

Я пытаюсь использовать псевдоним ( profile_id ) внутри моего условия соединения. Сбой. Есть ли способ сделать это?

Комментарии:

1. Повторите выражение в условии.

2. Я сделал, запрос продолжается и никогда не завершается.

3. Возможно, какая-то другая транзакция с незафиксированными изменениями блокирует его. Или это просто занимает много времени из-за большого количества данных и / или плохой индексации. Однако это не имеет ничего общего с тем, что псевдоним непригоден для использования в условии соединения.

4. Происходит сбой с сообщением об ошибке?

5. @stickybit вы правы, это просто заняло слишком много времени, но это сработало.

Ответ №1:

Псевдонимы столбцов, определенные в SELECT предложении, не могут быть использованы в условиях объединения. Это потому, что FROM предложение вычисляется перед SELECT предложением.

Если я правильно вас понял, вы, вероятно, хотите:

 SELECT t1.*, IFNULL(t2.profile_id, t3.profile_id) AS `profile_id`
FROM table1 AS t1
LEFT JOIN table2 AS t2
    ON t1.id = t2.some_coulm
LEFT JOIN table3 AS t3
    ON t1.id = t3.some_coulm
LEFT JOIN table4 AS t4
    ON IFNULL(t2.profile_id, t3.profile_id) = t4.some_column