Ciao a tutti!!!
Vorrei chiedervi aiuto per la risoluzione di alcune query. Le ho già scritte di mio, ma in realtà, anche se funzionano, sembrano parecchio lunghe e confusionarie e magari c'è un modo più semplice per scriverle che a me sfugge.
Dato che sono 10 query, vi scrivo solo quelle su cui ho più dubbi

Il nostro database è così formato
Transazione(CodiceT , Offerta, Data, Centro di raccolta)
Offerta( CodiceO , Venditore)
Gruppo di acquisto([I] Acquirente, Transazione[/U] )
Composizione( Offerta, Bene )
Afferenza( Bene, Categoria )
Feedback( Acquirente, Transazione , Voto numerico, Giudizio testuale)
Acquirente(CodiceA, Città fatturazione)

Le query ci chiedono di trovare
1."Tutti gli acquirenti che hanno effettuato transazioni di beni appartenenti alla stessa categoria e che hanno espresso valutazioni negative sul venditore (voto < 3)"
2. Tutti i venditori che hanno ricevuto valutazioni negative dagli stessi acquirenti.
3. Tutti i venditori che hanno ricevuto valutazioni positive dagli acquirenti che vivono nella stessa città.

Query1
codice:
CREATE VIEW `Categoria beni transazioni` AS
SELECT 
    T1.`Codice transazione` AS Transazione,
    A1.Bene,
    A1.Categoria
FROM
    Transazione T1
        JOIN
    Offerta O1 ON T1.Offerta = O1.`Codice offerta`
        JOIN
    Composizione C1 ON O1.`Codice offerta` = C1.Offerta
        JOIN
    Afferenza A1 ON C1.Bene = A1.Bene;

CREATE `Info voti` AS
SELECT 
    Acquirente, 
    Venditore, 
    Transazione, 
    `Voto numerico` AS Voto, 
    `Giudizio testuale` AS Giudizio
FROM 
    Feedback AS F1 
        JOIN 
    Transazione AS T1 ON F1.Transazione = T1.`Codice transazione`
        JOIN 
    Acquirente AS A1 ON F1.Acquirente = A1.`Codice acquirente`;

CREATE VIEW `Acquirente-Categoria` AS
SELECT DISTINCT
    IV1.Acquirente,
    IV1.Venditore,
    IV1.Voto,
    IV1.Transazione,
    CB1.Categoria
FROM
    `Info voti` IV1
        JOIN
    `Categoria beni transazioni` CB1 ON IV1.Transazione = CB1.Transazione
WHERE
    Voto < 3;


SELECT DISTINCT
    AC1.Acquirente, AC2.Acquirente
FROM
    `Acquirente-Categoria` AC1
        JOIN
    `Acquirente-Categoria` AC2 ON AC1.Categoria = AC2.Categoria
WHERE
    AC1.Acquirente <> AC2.Acquirente AND AC1.Categoria = AC2.Categoria;
Query2
codice:
 
SELECT DISTINCT
    IV1.Acquirente,
    IV1.Venditore,
    IV1.Voto,
    IV2.Acquirente,
    IV2.Venditore,
    IV2.Voto
FROM
    `Info voti` IV1
        JOIN
    Transazione T1 ON IV1.Transazione = T1.`Codice transazione`
        JOIN
    (
     `Info voti` IV2
         JOIN 
      Transazione T2 ON IV2.Transazione = T2.`Codice transazione`
    ) 
    ON T1.Venditore = T2.Venditore
WHERE
    IV1.Voto < 3 
    AND IV2.Voto < 3 
    AND IV1.Acquirente = IV2.Acquirente 
    AND IV1.Transazione <> IV2.Transazione
;
Query3
codice:
SELECT 
    Venditore,
    `Città fatturazione` AS `Città`,
    COUNT(DISTINCT Acquirente) `Voti positivi`
FROM
    `Info voti` IV1
        JOIN
    Acquirente A1 ON IV1.Acquirente = A1.`Codice acquirente`
WHERE
    Voto > 3
GROUP BY `Città fatturazione`
HAVING `Voti positivi` > 1
;
Ringrazio in anticipo chi vorrà aiutarmi