Я выполнил поиск в stackoverflow, но не нашел точного ответа на свой вопрос, поэтому, пожалуйста, помогите мне, если сможете.
Я «хочу» построить инструкцию SQL следующим образом:
SELECT
@tax1 := (complicated calculation formula),
@owe := (another complicated calculation formula),
IF(@owe=0, 0,@tax1/@owe)
FROM ...
Однако, в документации MySQL относительно пользовательских переменных , он советует против этого сказать:
Как правило, вы никогда не должны присваивать значение пользовательской переменной и читать значение в одном и том же выражении. Вы можете получить ожидаемые результаты, но это не гарантировано. Порядок вычисления для выражений с участием пользовательских переменных не определен и может изменяться в зависимости от элементов, содержащихся в данном выражении; Кроме того, этот порядок не гарантируется одинаковым между выпусками MySQL Server. В SELECT @a, @a: = @ a + 1, ... вы можете подумать, что MySQL сначала вычислит @a, а затем выполнит присваивание. Однако изменение оператора (например, путем добавления предложения GROUP BY, HAVING или ORDER BY) может привести к тому, что MySQL выберет план выполнения с другим порядком оценки.
Моя цель состоит в том, чтобы избежать копирования и вставки этих очень сложных формул, потому что это ухудшает читабельность, и, если формула меняется каждый раз, я должен гарантировать, что она изменяется во всех местах - НО я знаю, делая это, она ' все будет работать нормально.
Кроме того, я знаю, что ALIAS не работает, потому что псевдонимы работают только в предложениях GROUP BY, HAVING и ORDER.
Я читал в некоторых других публикациях, чтобы сначала выполнить подзапрос, чтобы сначала вычислить @ tax1 и @owe, а затем использовать другой запрос, чтобы объединить результаты. НО я думаю, что производительность может быть менее эффективной, чем простое копирование и вставка этих формул на месте.
У кого-нибудь есть предложения, что они будут делать? Или я застрял с выбором между удобочитаемостью и производительностью?
Заранее спасибо.