ВСКРЫТИЕ ПОКАЗАЛО, ЧТО ПРИЧИНОЙ СМЕРТИ СТАЛО ВСКРЫТИЕ

MYSQL. Золотой фонд запросов.

2018.10.15 12:24

1. Как найти первый незанятый идентификатор:

SELECT (mytable.id+1) as new_id FROM mytable WHERE (SELECT 1 FROM mytable as st WHERE st.id=(mytable.id+1)) IS NULL ORDER BY mytable.id LIMIT 1

то же, но начиная с 1000:

SELECT (mytable.id+1) as new_id FROM mytable WHERE mytable.id>1000 AND (SELECT 1 FROM mytable as st WHERE st.id=(mytable.id+1)) IS NULL ORDER BY mytable.id LIMIT 1

2. Не помню для чего:

(SELECT * ORDER BY `f1` DESC LIMIT 15) ORDER BY `f2` DESC;

3. Как найти количество подстрок в строке:

SELECT (LENGTH(строка) - LENGTH(REPLACE(строка, подстрока, ''))) / LENGTH(подстрока) FROM ...

4. Пропустить определенные таблицы в mysqldump:

mysqldump -h <host> -u <username> -p <schema> --no-data > db-structure.sql

mysqldump -h <host> -u <username> -p <schema> --no-create-info --ignore-table=schema.table1 --ignore-table=schema.table2 > db-data.sql

5. Как выбрать с LEFT JOIN только одну запись?

Правильный ответ - не использовать LEFT JOIN. Выигрыш во времени на 1-2 порядка.

SELECT u.*, (SELECT video_id FROM video_stats v where u.member_id=v.member_id limit 1) as video_id FROM users u;


КОММЕНТАРИИ

Введите код с картинки: