Я пытаюсь получить идентификатор из таблицы компаний, где идентификатор еще не находится в таблице crawlLog. Затем мне нужно вставить этот companyId в таблицу crawlLog.
Мне нужно сделать это за один вызов, чтобы параллельные сканеры не извлекали тот же URL-адрес после того, как какой-то другой сканер выбрал URL-адрес, но еще не вставил его в журнал сканирования. Я не хочу блокировать таблицы из-за других проблем, которые генерируют.
Я получаю эту ошибку в обоих запросах ниже:
You can't specify target table 'crawlLog' for update in FROM clause
Вот два запроса, которые я пытался сделать то же самое.
INSERT INTO crawlLog (companyId, timeStartCrawling)
VALUES
(
(
SELECT companies.id FROM companies
LEFT OUTER JOIN crawlLog
ON companies.id = crawlLog.companyId
WHERE crawlLog.companyId IS NULL
LIMIT 1
),
now()
)
Я тоже пробовал это, но получаю ту же ошибку:
INSERT INTO crawlLog (companyId, timeStartCrawling)
VALUES
(
(
SELECT id
FROM companies
WHERE id NOT IN
(
SELECT companyId
FROM crawlLog
)
LIMIT 1
),
now()
)