Linuchs: mySQL UPDATE abhängig von anderen Tabellen

Beitrag lesen

Moin,

Besucher einer Messe sollen einen Vermerk in ihren Stammsatz (adr1) bekommen, wenn weder Kontaktwünsche (kon1) noch Eventwünsche (evb1) gespeichert sind.

SQL-Fehlermeldung: #1241 - Operand should contain 1 column(s)

Hatte ich schon befürchtet, aber der Unter-select kommt mit diesem einen Feld nicht aus, die Anzahl der Wünsche müssen ermittelt werden:

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# merkmalsleiste Stelle 5 auf E (Erinnern) setzen
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
UPDATE  tm_adressen adr1
SET     adr1.merkmalsleiste = CONCAT( SUBSTRING(merkmalsleiste,1,4), 'E' )
WHERE   adr1.owner_id       = '17'
AND     adr1.id =
(
SELECT
 adr1.id
,adr1.bezeichnung
,adr1.nname
,adr1.vname
,COUNT(kon1.besucher_id)    anzahl_kontaktwuensche
,COUNT(evb1.adress_id)      anzahl_eventwuensche

FROM    tm_adressen adr1

LEFT JOIN tm_kontakte kon1
ON        kon1.besucher_id  = adr1.id
AND       kon1.prio_1       = '1'       # Aussteller-Wuensche ignorieren

LEFT JOIN tm_eventbuchungen evb1
ON        evb1.adress_id  = adr1.id

WHERE     adr1.owner_id = '17'
AND       adr1.adr_kz   = 2
GROUP BY  adr1.id
HAVING    anzahl_kontaktwuensche  = 0 AND anzahl_eventwuensche  = 0
)

Folgende Variante erzeugt #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT adr2.id ,adr2.bezeichnung ,adr2.nname ,adr2.vname ,COUNT(kon1.besuc' at line 9

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# merkmalsleiste Stelle 5 auf E (Erinnern) setzen
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
UPDATE  tm_adressen adr1
SET     adr1.merkmalsleiste = CONCAT( SUBSTRING(merkmalsleiste,1,4), 'E' )
WHERE   adr1.owner_id       = '17'
AND     adr1.id = adr2.id
(
SELECT
 adr2.id
,adr2.bezeichnung
,adr2.nname
,adr2.vname
,COUNT(kon1.besucher_id)    anzahl_kontaktwuensche
,COUNT(evb1.adress_id)      anzahl_eventwuensche

FROM    tm_adressen adr2

LEFT JOIN tm_kontakte kon1
ON        kon1.besucher_id  = adr2.id
AND       kon1.prio_1       = '1'       # Aussteller-Wuensche ignorieren

LEFT JOIN tm_eventbuchungen evb1
ON        evb1.adress_id  = adr2.id

WHERE     adr2.owner_id = '17'
AND       adr2.adr_kz   = 2
GROUP BY  adr2.id
HAVING    anzahl_kontaktwuensche  = 0 AND anzahl_eventwuensche  = 0
)

denke ich zu kompliziert? Habe im Netz kein vergleichbares Beispiel gefunden.

Gruß, Linuchs