Ho un tavolo chiamato "persone" e le persone hanno untabella associata denominata "aspetti". Mi piacerebbe aggiornare la tabella delle persone con il "appearance_count" selezionato con un join di sinistra in MySQL. Sto solo avendo qualche problema con la sintassi. Dove inserirò la mia dichiarazione di aggiornamento nella seguente query. Ho provato un aggiornamento simile a questo ma ho continuato a ricevere un errore "impossibile aggiornare la stessa tabella della tabella selezionata" (o qualcosa del genere). Ecco la mia query nel suo modulo di selezione raw:
SELECT people.*,
COUNT(appearances.id) as app_count,
FROM `people`
INNER JOIN `appearances`
ON `appearances`.`person_id` = `people`.`id`
GROUP BY `people`.`id`
HAVING app_count > 0;
Come dovrei prendere "app_count" e impostare people.appearance_count come tale valore?
risposte:
4 per risposta № 1credo HAVING
non è necessario perché filtrerà i record che hanno a COUNT
di maggiore di zero e ti unirai con il tavolo PEOPLE
utilizzando LEFT JOIn
.
UPDATE people a
LEFT JOIN
(
SELECT b.id, COUNT(c.person_ID) totalCOunt
FROM people b
INNER JOIN appearances c
ON c.person_id = b.id
GROUP BY b.id
) d ON a.ID = d.ID
SET a.appearance_count = d.totalCount