У меня есть следующий ЗЕЬЕСТ, возвращающий данные, пример ниже:MySQL объединить UPDATE и SELECT, запрос
SELECT performers.ID,
performers.Name,
COUNT(*) AS CountOfDeals,
COUNT(DISTINCT(deals.Name)) AS CountOfAliases
FROM deals RIGHT JOIN performers
ON deals.name LIKE CONCAT('%', performers.name, '%')
WHERE performers.ID IN (27952, 27951, 27950, 27949, 27948)
GROUP BY Name;
Пример данных, возвращаемый:
ID Name CountOfDeals CountOfAliases
27952 Christine Hoberg 1 0
27951 Indian Jewelry 1 0
27952 Kinky Friedman 5 3
27949 KJ-52 1 0
27960 River Whyless 1 0
Я хочу совместить это с утверждением UPDATE
UPDATE performers
SET RawAliasCount = CountOfAliases,
RawDealCount = CountOfDeals
WHERE ID = ?
Все значения, необходимые для запуска оператора обновления, возвращаются в предложении select выше, так что, надеюсь, это должно быть довольно легко.
Спасибо.
Я считаю, что ваш запрос не возвращает нужный результат для CountOfDeals. Попробуйте проверить его с пустой таблицей для сделок, она возвращает 1 в любом случае. попробуйте добавить туда, где предложение deal.name не равно null. – Tata
И в основном это убийца производительности, чтобы использовать JOIN-исполнителей на deal.name LIKE CONCAT ('%', performers.name, '%'). Это соединение будет выполнять полное сканирование таблицы, даже если у вас есть индекс в поле deal.name. – Tata
Tata, возможно, вы были правы, там должно быть несколько нулевых результатов. Я недавно изменил его, поэтому придется провести еще несколько тестов. – pixelkicks