Problema con inner join su view

di il
2 risposte

Problema con inner join su view

Salve,
ho riscontrato un problema con mysql e non ne capisco il motivo. Il problema è sulla 5a richiesta del punto 3.

TRACCIA:


Io ho proceduto creando un view con i nomi dei prodotti venduti a febbraio e il totale delle relative vendite.
create view v1 as select prodotto,sum(quantita) as TOT from vendita where month(data)=2 group by prodotto;
Poi ho fatto un join della view e della tabella prodotto, selezionando solo il nome del prodotto e usando come discriminante che la quantità doveva essere quella massima.
select prodotto.nome as PRODOTTO_PIU_VENDUTO from prodotto inner join v1 on v1.prodotto=prodotto.id_prodotto having v1.TOT=max(v1.TOT);
Ma mi dà l'errore "Unknown column 'v1.TOT'' in 'having clause'".
La cosa che non capisco però è perchè se aggiungo alla select v1.TOT tutto funziona perfettamente.
select prodotto.nome as PRODOTTO_PIU_VENDUTO, v1.tot as TOTALE from prodotto inner join v1 on v1.prodotto=prodotto.id_prodotto having v1.TOT=max(v1.TOT);
In parole semplici non capisco perchè v1.TOT non viene riconosciuta come colonna se non viene inserita nel select, mentre normalmente posso utilizzare le colonne non presenti nel select come discriminanti.

Grazie a chi mi aiuterà.

PS: allego il testo del .sql per chi volesse avere sottomano i vari database.
#CREAZIONE DATABASE

create database negozi;

#SELEZIONE DATABASE

use negozi;

#CREAZIONE TABELLA PRODOTTO

create table prodotto(
id_prodotto int auto_increment primary key,
nome varchar(20) not null,
categoria varchar(20) not null,
prezzo decimal(8,2) not null);

#CREAZIONE TABELLA NEGOZIO

create table negozio(
id_negozio int auto_increment primary key,
nome varchar(20) not null);

#CREAZIONE TABELLA VENDITA

create table vendita(
prodotto int,
negozio int,
data date,
quantita int,
primary key (prodotto,negozio,data),
constraint fk_pro
foreign key(prodotto)
references prodotto(id_prodotto),
constraint fk_neg
foreign key(negozio)
references negozio(id_negozio));

#INSERIMENTO DATI PRODOTTO

insert into prodotto(nome,categoria,prezzo) values
('Maglione','Abbigliamento',22.44),
('Scarpe','Abbigliamento',50.40),
('Cinta','Abbigliamento',10.44),
('Decoder','Elettronica',100.00),
('Stampante','Elettronica',80.50),
('Monitor','Elettronica',200.10);

#INSERIMENTO DATI NEGOZIO

insert into negozio(nome) values
('Gigastore'),
('Fitness Boutique');

#INSERIMENTO DATI VENDITA
insert into vendita values
(1,1,'2008-1-1',1),
(1,2,'2008-1-1',2),
(2,1,'2008-1-1',5),
(2,2,'2008-2-5',1),
(2,2,'2008-2-4',10),
(3,1,'2008-2-6',5),
(3,2,'2008-3-6',1),
(3,1,'2008-4-10',10),
(4,2,'2008-10-4',20),
(4,2,'2008-11-10',50),
(4,2,'2008-12-11',1);

2 Risposte

  • Re: Problema con inner join su view

    little_lakes ha scritto:


    In parole semplici non capisco perchè v1.TOT non viene riconosciuta come colonna se non viene inserita nel select, mentre normalmente posso utilizzare le colonne non presenti nel select come discriminanti.
    "Credo" che il problema sia la clausula "HAVING", questo link dovrebbe darti una risposta
    http://www.mysqltutorial.org/mysql-having.asp
  • Re: Problema con inner join su view

    Il fatto è che non puoi usare una funzione di aggregazione come Max su un campo che non è stato incluso nella SELECT in quanto non elaborato.
Devi accedere o registrarti per scrivere nel forum
2 risposte