Во-первых, ваш синтаксис для назначения переменных неверен, ему нужна команда SET
перед именем переменной.
Во-вторых, если вы хотите использовать результат запроса SELECT
в качестве значения,Вы должны заключить в скобки:
SET @fence_ids = (SELECT ...);
В-третьих, когда вы используете:
WHERE af.fence_id IN (@fence_ids)
, он будет обрабатывать @fence_ids
как один идентификатор, а не список идентификаторов.Так что это эквивалентно:
WHERE af.fence_id = @fence_ids
Если вы хотите найти что-то в списке через запятую, вам нужно использовать FIND_IN_SET
:
WHERE FIND_IN_SET(af.fence_id, @fence_ids)
Вы также не должны 'Не добавляйте кавычки вокруг значений в вашем GROUP_CONCAT()
.
Но вы не должны использовать GROUP_CONCAT
для этого, вам нужно просто присоединиться к запросу, который возвращает все нужные вам идентификаторы.
DELETE
af,
gf
FROM
geo_fence gf
INNER JOIN asset_fence af ON gf.fence_id = af.fence_id
INNER JOIN assets a ON a.vehicle_id = af.vehicle_id
WHERE a.client_id=f_client_id;
Вам не нужно делать это в двух утверждениях:
SET @AROWS = ROW_COUNT();
SELECT @AROWS as AROWS;
Вы можете просто сделать:
SELECT ROW_COUNT() AS AROWS;