IDがまだcrawlLogテーブルにない会社のテーブルからIDを取得しようとしています。次に、その companyId をcrawlLog テーブルに挿入する必要があります。
他のクローラーが URL を選択した後、並列クローラーが同じ URL をプルしないように、1 回の呼び出しでこれを行う必要がありますが、まだクロール ログに挿入していません。他の問題が発生するため、テーブルをロックしたくありません。
以下の両方のクエリからこのエラーが発生します。
You can't specify target table 'crawlLog' for update in FROM clause
同じことをしようとした2つのクエリを次に示します。
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()
)