SELECT
vl1.phone_number,
vl1.first_name,
CONCAT(
SUBSTRING(
(
SELECT
vl2.phone_number
FROM
list as vl2
WHERE
vl2.phone_number LIKE CONCAT( SUBSTRING( vl1.phone_number FROM 1 FOR 3 ), "%" )
ORDER BY
RAND( )
LIMIT 1
)
FROM
1 FOR 6
),
FLOOR( RAND( ) * ( 8999 ) ) + 1000
) AS autogenNumber
FROM
list as vl1
LIMIT 1
Я получаю следующие результаты:
phone_number | firstname | autogenNumber
Номер autogenNumber генерируется при первом поиске других чисел, которые разделяют первые три цифры.Затем выбираются 6 цифр из этого числа и еще 4 случайных цифры заменяются до конца.
Приведенный выше SQL-запрос генерирует номер автогена точно так, как мне нужно.
Однако теперь возникает проблема, когда я хочу обновить столбец security_phrase в этом списке, используя аналогичный запрос ниже.
UPDATE list as vl1
SET vl1.security_phrase = (
CONCAT(
SUBSTRING(
(
SELECT
vl2.phone_number
FROM
list AS vl2
WHERE
vl2.phone_number LIKE CONCAT( SUBSTRING(phone_number FROM 1 FOR 3 ), "%" )
ORDER BY
RAND( )
LIMIT 1
)
FROM
1 FOR 6
),
FLOOR( RAND( ) * ( 8999 ) ) + 1000
)
)
LIMIT 10
выдает ошибку:
1093 - Таблица 'vl1' указывается дважды, как в качестве цели для 'ОБНОВЛЕНИЕ', так и в качестве отдельного источника для данных
Я также пытался
UPDATE list AS vl1
JOIN list AS vl2
SET vl1.security_phrase = (
CONCAT( SUBSTRING( vl2.phone_number FROM 1 FOR 6 ), FLOOR( RAND( ) * ( 8999 ) ) + 1000 )
)
WHERE
vl2.phone_number LIKE CONCAT( SUBSTRING( vl1.phone_number FROM 1 FOR 3 ), "%" )
Не работает и не дает ожидаемых результатов ...
Любая помощь