Mysql si unisce, somma, avendo, gruppo di. Non riesco a capirlo
-
13-11-2019 - |
Domanda
Sto riscontrando un problema con MySQL quando faccio un join di due tabelle e filtrando usando per queste due tabelle.
Supponiamo che i miei tavoli siano così:
Prodotti:
id | Name
1 | Product 1
2 | Product 2
3 | Product 3
Recensioni:
Name | Product_id | score
Review 1 | 1 | 10000
La mia ipotesi migliore è stata la seguente, ma non funziona:
SELECT "products".*, sum("reviews".score) FROM "products" INNER JOIN "reviews" ON "reviews"."empire_id" = "products"."id" GROUP BY products.id HAVING sum("reviews".score)=0;
E vorrei ottenere i prodotti che hanno un punteggio di 0, nel senso che non sono stati rivisti. Sento che questo dovrebbe essere facile, ma non riesco a capire.
Soluzione
Sembra che tu voglia prodotti che si presentano nella tabella "Prodotti" ma non nella tabella "Recensioni". Forse dai un'occhiata SQL - Trova record da una tabella che non esistono in un'altra?
In alternativa, la sostituzione del tuo join interner con un join a sinistra potrebbe funzionare.
Altri suggerimenti
SELECT products.id, products.name, sum("reviews".score)
FROM products
LEFT JOIN reviews ON reviews.product_id = products.id
GROUP BY products.id, products.name
HAVING sum(reviews.score)=0;
"Recensioni". "Empire_id" = "Products". "Id"
Dovrebbe essere "recensioni". "Product_id" = "Products". "Id"
In realtà il tuo gruppo di dovrebbe avere tutto il nome del tuo campo dal prodotto