SQL - правильность запрос с REGEXP

166
09 сентября 2018, 18:30
SELECT t1.dates_times, t1.file, t2.agent 
FROM ftp_json_stat t1, ftp_json t2 
WHERE t1.keys REGEXP '^(.{8})' = t2.keys

в t1.keys значения вида: d0790b5d_2018071323

в t2.keys значения вида: d0790b5d

При выполнении запроса - висит, потом отваливается по времени максимального выполнения. Записей в базах не много (100 000).

Запрос правильно составлен? Не могу понять почему висит, может быть получается очень большое количество записей которые он хочет выбрать из-за корявости запроса?

Answer 1

в t1.keys значения вида: d0790b5d_2018071323

в t2.keys значения вида: d0790b5d

Если нужно сравнить значение из t2 с первой до подчёркивания группой из t1, используйте, например

WHERE SUBSTRING_INDEX(t1.keys, '_', 1) = t2.keys

Если длина сравниваемой подстроки фиксирована (8 символов), можно использовать и прямое выделение нужного количества символов

WHERE LEFT(t1.keys, 8) = t2.keys

PS. REGEXP в MySQL в принципе ничего не преобразовывает - только проверяет.

Answer 2

Пробуйте так:

SELECT t1.dates_times, t1.file, t2.agent FROM ftp_json_stat t1
JOIN ftp_json t2 ON t1.keys REGEXP CONCAT('^', t2.keys)
READ ALSO
Выбрать ближайшие даты из текущего года

Выбрать ближайшие даты из текущего года

Допустим есть таблица с разными датами (день рождения, день ВДВ, год без наркотиков, вернуть долг пете)Некоторые повторяются каждый год, некоторые...

189
Бэкап только новых данных MySQL

Бэкап только новых данных MySQL

Есть например таблица с 10 милионов записей

198
Структура таблиц mySQL

Структура таблиц mySQL

Прошу совета по структуре таблиц

190
Как правильно сверстать модальное окно?

Как правильно сверстать модальное окно?

Написал тестовое модальное окно, но возникла проблема

353