#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