Aktualizace dat z bodu na SQLite

0

Otázka

Mám tabulku, **majetek **se záznamy z postgis souřadnice sloupce geoarea(Body), a bool sloupec within_area(Bool) k určení, zda její vnitřek, že další postgis st_union(Polygon) z tabulky urbanArea

select properties.id, ST_Within(properties.geoarea,st_transform("urbanArea"."st_union",2393)) from properties,"urbanArea"

což mě vrací všechny záznamy v vlastnosti podle id, a bool hodnotu, pokud jeho rámci této oblasti nebo ne. To trvá asi 10 sekund k provedení dotazu

Rád bych nyní získat hodnoty z select a vložte ji do within_area sloupci, jsem přišel s tímto SQL dotaz, ale to visí navždy a nemá konce, nějaký nápad, proč?

UPDATE properties p
SET  within_area = (
with newarea as (select properties.id, ST_Within(properties.geoarea,st_transform("urbanArea"."st_union",2393)) as "isInside" from properties,"urbanArea")
select u."isInside" from newarea u  where u.id = p.id
)

Já jsem se stejně snažil dělat to s CTE přesto stále visí navždy.

with newarea as (select properties.id, ST_Within(properties.geoarea,st_transform("urbanArea"."st_union",2393)) from properties, "urbanArea")
UPDATE properties
SET 
    withinurban=newa.st_within
FROM properties prop
INNER JOIN
newarea newa
ON prop.id = newa.id
1

Nejlepší odpověď

1

Odstranit nadbytečné připojit k properties v 2. dotaz:

WITH newarea AS (
  SELECT p.id, 
         ST_Within(p.geoarea, ST_Transform(u."st_union", 2393)) st_within
  FROM properties p, "urbanArea" u
)
UPDATE properties p
SET withinurban = n.st_within
FROM newarea n
WHERE p.id = n.id;

Ale tvůj kód se zdá, odpovídá jen:

UPDATE properties p
SET withinurban = ST_Within(p.geoarea, ST_Transform(u."st_union", 2393))
FROM "urbanArea" u;

nebo:

UPDATE properties p
SET withinurban = ST_Within(p.geoarea, ST_Transform((SELECT "st_union" FROM "urbanArea"), 2393));
2021-11-19 15:04:12

Dotazy, zdá se spustit, ale pořád visí na neurčito. Co by mohlo způsobit to možné?
BitByte

@BitByte funkce ST_Within() a ST_Transform() nejsou standardní SQLite funkce, takže nemůžu říct, o jejich výkonu při použití s SQLite. Říkáte, že výběrový dotaz trvá 10 sekund do konce a to je příznačné, že jen plný stůl skenování, jako že není rychlý. Zkuste aktualizovat tabulku kousky. Přidat WHERE p.id < 1000 (nebo jakýkoliv jiný limit) na dotazy a uvidíme, co se stane.
forpas

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................