Динамически изменяться при условии внутреннего объединения SQL

Мне нужно было обновить тестовый сервер и добавить файлы, измененные с версии 2.1. Для меня работало аналогичное решение, как James Ehly, но в моем случае я хотел экспортировать в архив пакет разницы между двумя старыми тегами - tag_ver_2.1 и tag_ver_2.2, а не только один.

Например: tag_ver_2.1 = 1f72b38ad tag_ver_2.2 = c1a546782 Здесь приведен пример:

git diff-tree -r --no-commit-id --name-only c1a546782 1f72b38ad | xargs tar -rf test.tar
-1
задан Matt 27 February 2019 в 20:21
поделиться

2 ответа

Вам просто нужно добавить вторую часть первого условия JOIN (or a.field1='abc' or a.field1='def') к первой части (a.field1 = b.field1), обусловленной b.field1 = 123, т.е.

inner join b on (a.field1 = b.field1 or b.field1 = 123 and (a.field1='abc' or a.field1='def'))
0
ответ дан Nick 27 February 2019 в 20:21
поделиться

Как правило, вы можете переписать любую условную логику if / conditional с осторожным использованием AND, хотя при этом производительность может пострадать.

ON (b.field1 = 123 AND (first conditions))
OR (b.field1 <> 123 AND (second conditions))

Как уже было сказано выше, производительность может пострадать (производительность MySQL, в частности, использование индекса, относительно низкая, если используется OR); поэтому альтернативой является использование UNION (который по-прежнему представляет собой один запрос, даже если он более подробный и полубрезервированный):

select a.field1, a.field2, a.field3, b.field1, b.field2, b.field3
from a
inner join b on (a.field1 = b.field1 or a.field1='abc' or a.field1='def')
where b.field1 = 123 and a.field2 = 'W'
UNION ALL
select a.field1, a.field2, a.field3, b.field1, b.field2, b.field3
from a
inner join b on (a.field1 = b.field1)
where b.field1 = 234 and a.field2 = 'W'.
0
ответ дан Uueerdo 27 February 2019 в 20:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: