Rolf B: SQL UPDATE out of SELECT

Beitrag lesen

Hallo Matthias,

ich habe das oben mal gemacht.

Michael, damit Programmcode (PHP, HTML, CSS, JavaScript, SQL) als solcher erkannt wird, musst Du ihn hier im Forum in ~~~ einrahmen.

Beispiel (mit Leerstellen vor dem ~~~, damit es nicht interpretiert wird):

 ~~~sql  
 SELECT foo FROM bar WHERE baz=7  

Hinter dem ersten ~~~ kann man noch die Sprache angeben. 

Zu deiner Query: Muss es ein geschachtelter Select sein? Normalerweise sollte man ein GROUP BY Ergebnis durch eine nachgelagertes HAVING-Klausel filtern können. Wenn Du MYSQL benutzt, kannst Du im HAVING Spalten und Terme benutzen, die in der SELECT-Liste gar nicht vorkommen (das geht in anderen SQL Dialekten nicht). Man muss auch nicht so viele Klammern setzen wie Du es getan hast...

Vorschlag:

~~~sql
UPDATE Kunden 
SET Kunden.DeleteIntern=1 
Where Kunden.KuIndex IN 
      (SELECT Kontakte.KuIndex
       FROM Kontakte INNER JOIN Kontaktart ON (Kontakte.Titel=Kontaktart.Kontaktart) 
       GROUP BY Kontakte.KuIndex
       HAVING SUM(IF(Kontaktart.Lebenszeichen IS NULL 
                  AND Kontakte.Zeitpunkt > DATE_ADD(CURDATE(), INTERVAL -3 YEAR), 1, 0)) > 5
          AND MAX(IF(Kontaktart.Lebenszeichen = 1, Kontakte.Zeitpunkt, NULL)) 
                                  < DATE_ADD(CURDATE(), INTERVAL -3 YEAR)

Rolf

--
sumpsi - posui - clusi