2014-01-03 3 views
0

Из-за его географических возможностей я переношу свою базу данных из MySQL в PostgreSQL/PostGIS, а SQL, который раньше был настолько тривиальным, теперь становится крайне медленным для преодоления.UPDATE с вложенным запросом в PostgreSQL с нежелательными результатами

В этом случае я использую вложенный запрос для получения результатов в двух столбцах, имеющих в первом столбце идентификатор, а во втором - результат подсчета и вставляя эти результаты в таблицу1. EDIT: Это оригинальный MySQL рабочий код, что мне нужно работать в PostgreSQL:

UPDATE table1 INNER JOIN (
    SELECT id COUNT(*) AS cnt 
    FROM table2 
    GROUP BY id 
) AS c ON c.id = table1.id 
SET table1.cnt = c.cnt 

Результат иметь все строки с тем же результатом подсчета голосов, что является первым результатом подсчета вложенных выбора. В MySQL это было бы легко решено. Как это работает в PostgreSQL? Спасибо!

+0

Вам не нужен 'ASC', так как подзапрос связан в любом случае. Однако вам нужно имя корреляции для внешнего запроса. – wildplasser

+0

Можете ли вы написать версию MySQL, которая решила бы «легко»? –

+0

Спасибо лошади. С другой стороны, мой ответ не существовал бы вообще. – wildplasser

ответ

0
UPDATE table1 dst 
SET cnt = src.cnt 
FROM (SELECT id, COUNT (*) AS cnt 
    FROM table2 
    GROUP BY id) as src 
WHERE src.id = dst.id 
; 
+0

Я редактировал код SQL в вопросе, чтобы показать исходный рабочий код MySQL, вместо проблемного кода postgresql для ясности. Но спасибо за ваш ответ. Я приветствую вашу помощь. –

+0

Это справедливо. Но, как я сказал, не все люди postgres/SQL понимают основную семантику. – wildplasser

Смежные вопросы