Сократить количество mysql-кода

200
18 июня 2017, 16:23

Можно ли как-нибудь сократить количество mysql-кода в следующем запросе?

SELECT IF(EXISTS(SELECT * FROM tbl WHERE `field_1` LIKE '1'), 
         (SELECT field_3 FROM tbl WHERE `field_1` LIKE '1'), 
         (SELECT field_3 FROM tbl WHERE `field_2` LIKE '1'));
Answer 1

Если столбцы field_1 и field_2 не уникальны, то подзапросы, в приведенном вами примере, могут вернуть несколько значений. Сам запрос можно сократить до одной выборки из таблицы, что сократит число обращений к таблице:

SELECT field_3
FROM tbl
WHERE `field_1` = 1 OR (`field_1` != 1 and `field_2` = 1)
ORDER BY `field_1`
LIMIT 1;

Если field_1 и field_2 уникальны, то сортировка и ограничение числа записей не нужно:

SELECT field_3
FROM tbl
WHERE `field_1` = 1 OR (`field_1` != 1 and `field_2` = 1);
Answer 2

Судя по всему, у вас во from другие таблицы, поэтому вы решили использовать подзапросы в select. Можно сделать так при условии, что SELECT field_3 FROM tbl WHERE field_1 LIKE '1' возвращает строго 1 строку всегда:

SELECT IFNULL((SELECT field_3 FROM tbl WHERE `field_1` = '1'), 
              (SELECT field_3 FROM tbl WHERE `field_2` = '1'));

Не стоит делать like, если нет необходимости, у вас тут строгое сравнение с единичкой.

READ ALSO
android java ListAdapter adapter

android java ListAdapter adapter

Есть адаптер в который я загружаю данные с ArrayList нужно проверить если item имеет значение, допустим "красный" - то красим этот item в красный

303
Открытие диалог фрагмента в Clean Architecture

Открытие диалог фрагмента в Clean Architecture

Мне интересна работа с фрагментами и диалогФрагментамиВот я нашёл проект, но я смотрю его и у меня куча вопросов

222
JAVA. Spring MVC, как создать view

JAVA. Spring MVC, как создать view

Доброго времени сутокВпервые щупаю Spring MVC

296