#mysql #sql #union
#mysql #sql #объединение
Вопрос:
У меня есть запрос MySQL, который всегда должен сравнивать 4 значения, мне нужно добавить эти значения со строками, используя ОБЪЕДИНЕНИЕ ВСЕХ, но этот код выглядит очень большим, и я хочу его упростить. Код следующий:
SELECT
trimestre,
IF ((meta = 0) OR (meta is null) or not(meta REGEXP '[0-9] '), :meta, meta) as valor
FROM
(
SELECT
trimestre,
valor AS meta
FROM
view_valores_indicadores
WHERE
anio = :anio
AND codigo_indicador = :codigo_indicador
AND alias_campo = 'meta'
UNION ALL
SELECT
1,
:meta
UNION ALL
SELECT
2,
:meta
UNION ALL
SELECT
3,
:meta
UNION ALL
SELECT
4,
:meta
ORDER BY
trimestre ASC
) AS T
GROUP BY
TRIMESTRE
Я хочу знать, возможно ли упростить это множественное ОБЪЕДИНЕНИЕ, как
UNION ALL SELECT (row1, row1, row3...)
Комментарии:
1. используйте многоразовую вспомогательную таблицу с известными смежными идентификаторами
2. Как сказал @Drew, вы можете использовать вспомогательную таблицу, в которой находятся все эти вспомогательные идентификаторы. Тогда вам нужно использовать один из них
UNION ALL
вот так...UNION ALL SELECT id, :meta From your_helper_table....
3. Не спешите «упрощать» код. Если это работает, и работает эффективно, то у вас не должно возникнуть проблем с этим.
4. Ну, наличие блока из ста или тысяч союзов в одном заявлении было бы довольно неловко, и эти ответы взяты с этого сайта. Объединения не масштабируются. Избегайте их, как чумы. Обычно признак ужасного дизайна
5. @Drew не ужасен, я считаю, что этот особый случай полезен