2016-09-05 8 views
1

In der Tabelle doTable Ich brauche das Feld zu setzen Priority zu 1 wo diese Bedingungen vorhanden sind, für einen einzelnen CBT_ID:Update-Feld auf der gleichen Tabelle in MySql db

  1. CEO> 0
  2. SUM (CE_TOT)> 50

Und ich habe diese SQL-Abfrage ohne Erfolg versucht, weil ich einen Fehler habe.

mysql> UPDATE `doTable` pd 
INNER JOIN `doTable` pd2 ON (
    pd.CBT_ID = pd2.CBT_ID 
    AND pd.CEO > 0 
    AND SUM(pd.CE_TOT) > 50 
) 
SET pd.Priority = 1; 
1111 - Invalid use of group function 

Wie löst man das?

Antwort

1

Versuchen Sie folgendes:

UPDATE `doTable` AS r 
JOIN (
    SELECT 
     CBT_ID, 
     SUM(CE_TOT) AS q, 
     CEO 
    FROM 
     `doTable` 
    WHERE 
     CEO > 0 
    GROUP BY 
     CBT_ID 
    HAVING 
     q > 50 
) AS grp ON r.CBT_ID = grp.CBT_ID 
SET r.Priority = 1 
WHERE 
    grp.CEO > 0 
AND grp.q > 50; 
2

dieses SQL

UPDATE doTable 
SET Priority = 1 
WHERE (
SELECT * 
FROM doTable 
WHERE CEO > 0 
AND SUM(CE_TOT) > 50 
); 

Wenn Sie einen Fehler versuchen erhalten Versuchen Sie, die und den sich ändernden DAR.

Oder laufen zwei Abfragen auf einmal

UPDATE doTable SET Priority=1 WHERE CEO > 0; 
UPDATE doTable SET Priority=1 WHERE SUM(CE_TOT) > 50; 
+0

Dank, aber ich habe die gleicher Fehler: ** 1111 - Ungültige Verwendung der Gruppenfunktion ** –

+0

Müssen beide Bedingungen erfüllt sein, damit die Priorität 1 ist? Wenn nicht, dann sollte die zweite Lösung auch für Sie funktionieren. – Krypton

4

Sie nicht Aggregationsfunktion wie sum in where Klausel verwenden können. Es ist schwierig, eine Abfrage zu schreiben, ohne Tabellenstruktur zu wissen, aber Sie können die folgenden man versuchen, wenn es mehr als eine Zeile mit demselben CBT_ID sind:

UPDATE `doTable` 
SET Priority = 1 
where CBT_ID in 
    (select CBT_ID from `doTable` 
    where CEO > 0 
    group by CBT_ID 
    having SUM(CE_TOT) > 50 
    ); 
Verwandte Themen