ОШИБКА: отсутствует запись предложения FROM для таблицы "fetched_row" - PullRequest
0 голосов
/ 25 марта 2020

Я новичок в SQL, поэтому вот запрос, который я пытаюсь выполнить

WITH fetched_row AS (SELECT * FROM sdmk_stereo_unfiltered_road_feature LIMIT 1)


        UPDATE sdmk_stereo_unfiltered_road_feature
                SET is_processed=true
        FROM (SELECT * FROM sdmk_stereo_unfiltered_road_feature WHERE (st_dwithin(location_modeled, fetched_row.location_modeled, 20, TRUE) AND
                sign_type=fetched_row.sign_type AND
                ts!=fetched_row.ts) ) as candidate_signs
        WHERE candidate_signs.id = sdmk_stereo_unfiltered_road_feature.id;

Я также пытался

WITH fetched_row AS (SELECT * FROM sdmk_stereo_unfiltered_road_feature WHERE (is_processed=false OR is_processed=NULL) LIMIT 1),
             candidate_signs AS (SELECT * FROM sdmk_stereo_unfiltered_road_feature WHERE (st_dwithin(location_modeled, fetched_row.location_modeled, 20, TRUE) AND
                sign_type=fetched_row.sign_type AND
                ts!=fetched_row.ts))
        UPDATE sdmk_stereo_unfiltered_road_feature
                SET is_processed=true
        FROM candidate_signs
        WHERE candidate_signs.id = sdmk_stereo_unfiltered_road_feature.id;

Тем не менее я получаю сообщение об ошибке

[42P01] ERROR: missing FROM-clause entry for table "fetched_row" Position: 272

Я понимаю, что ошибка, вероятно, где-то здесь

SELECT * FROM sdmk_stereo_unfiltered_road_feature WHERE (st_dwithin(location_modeled, fetched_row.location_modeled, 20, TRUE) AND
                sign_type=fetched_row.sign_type AND
                ts!=fetched_row.ts)

Но все же не повезло в отладке и получении ее на работу. Я думаю, что упускаю что-то совершенно очевидное.

1 Ответ

1 голос
/ 25 марта 2020

Вы не звоните fetched_row в FROM:

SELECT * 
FROM sdmk_stereo_unfiltered_road_feature,
     fetched_row
WHERE (st_dwithin(location_modeled, fetched_row.location_modeled, 20, TRUE) AND
                sign_type=fetched_row.sign_type AND
                ts!=fetched_row.ts)

Имеет смысл присоединиться к условию расстояния (тот же результат, но чище):

SELECT * 
FROM sdmk_stereo_unfiltered_road_feature
 JOIN fetched_row ON st_dwithin(location_modeled, fetched_row.location_modeled, 20, TRUE)
WHERE  sign_type=fetched_row.sign_type 
  AND ts!=fetched_row.ts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...