2011-03-11 20 views
17

naprawdę muszę zrobić coś takiego:GROUP BY w aktualizację z klauzulą ​​

UPDATE table t1 
SET column1=t2.column1 
FROM table t2 
INNER JOIN table t3 
USING (column2) 
GROUP BY t1.column2; 

Ale postgres mówi, że mam błąd składni o klauzuli GROUP BY. Jaki jest inny sposób na zrobienie tego?

+0

Sądzę, że trzeba wyraźniej zademonstrować, co chcesz: odwołanie się do "t2.column1", gdy grupujesz według "t1.column2", również nie ma sensu w zwykłym zapytaniu. Nie określasz też żadnych warunków łączących t2 i t1, co nie ma większego sensu. – araqnid

+0

Nie sądzę, że można to zrobić za pomocą mysql co najmniej – shigeta

Odpowiedz

47

Instrukcja UPDATE nie obsługuje GROUP BY, patrz the documentation. Jeśli próbujesz zaktualizować t1 z odpowiednim rzędzie od t2, którą chcesz użyć czegoś WHERE tak:

UPDATE table t1 SET column1=t2.column1 
FROM table t2 
JOIN table t3 USING (column2) 
WHERE t1.column2=t2.column2; 

jeśli trzeba grupować wiersze z T2/T3 przed przypisaniem do t1 , trzeba by użyć podzapytania coś takiego:

UPDATE table t1 SET column1=sq.column1 
FROM (
    SELECT t2.column1, column2 
    FROM table t2 
    JOIN table t3 USING (column2) 
    GROUP BY column2 
    ) AS sq 
WHERE t1.column2=sq.column2; 

Chociaż sformułowane, że nie będzie działać, ponieważ t2.column1 nie jest zawarte w oświadczeniu GROUP bY (musiałaby być funkcja kruszywo zamiast prostego odnośnika do kolumny).

W przeciwnym razie, co dokładnie próbujesz zrobić tutaj?

+1

Nie rozumiem, co on próbował zrobić, ale ta odpowiedź była dla mnie nadal pomocna =) – Yobert