Select con Join

toni1705

Nuovo Utente
98
9
Ho un database con relativo popolamento di questo tipo e mi è chiesto di effettuare diverse query.
Premetto che mi sto esercitando
dovrei:
a) Per ogni utente, trovare il suo login, il suo nome e il numero di aste non concluse con una vendita
in cui ha partecipato
b) Trovare il nome e il CF di tutti gli utenti che hanno effettuato più di due acquisti
Ho iniziato con la B perchè sembrava più semplice .. Ma semplice non è stato poichè non riesco a legare queste tre tabelle avevo provato con
SQL:
select vendita.cf ,utente.nome from vendita
inner  join rilanciata on rilanciata.id_asta=vendita.id_asta
 inner join utente  on  utente.login=rilanciata.login
where rilanciata.prezzo_rilancio=vendita.prezzo_finale
ovviamente non riesco a capire come un utente abbia potuto effettuare due acquisti..(Da cosa lo si evince a questo punto)?
Ma non so se è giusto perchè non ho la soluzione;

347025
 

Allegati

  • DiagrammaRelazionale_DBAsta.jpeg
    DiagrammaRelazionale_DBAsta.jpeg
    67 KB · Visualizzazioni: 93
Ultima modifica:

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Falla annidata, SELECT nome, CF from bla bla where exists ( bla bla having count(*) >= 2)
 

Tidus88

From another world
Utente Èlite
2,044
1,738
CPU
Ryzen 5600X
Dissipatore
Deepcool GAMMAX 400
Scheda Madre
Asus Prime B450-Plus
HDD
MX-500 500GB
RAM
Ballistix 16GB DDR4 3000Mhz
GPU
RTX 3060Ti Dual ASUS
Audio
Edifier R1280db
Monitor
Hisense H55U7A
PSU
Sharkoon Silentstorm Icewind 550W
Case
Corsair 275R Airflow White
Net
SkyWifi FTTH
OS
Windows 10
Oggettivamente trovo questo 'schema' un po' arzigogolato e poco pratico. E' un DB reale o per esercizi/studio?

A senso io mi sentirei di dire che se una login ha almeno 2 record in 'Vendita' allora per il B ci siamo.
Per cui (sempre se le mie supposizioni sono corrette)

SQL:
SELECT
    u.nome, v.cf
FROM
   utente u
      INNER JOIN
   rilanciata r ON u.login = r.login
      INNER JOIN
   vendita v ON r.ID_asta= v.ID_asta
GROUP BY
   u.login
HAVING
   count(u.login) > 1
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Oggettivamente trovo questo 'schema' un po' arzigogolato e poco pratico. E' un DB reale o per esercizi/studio?

A senso io mi sentirei di dire che se una login ha almeno 2 record in 'Vendita' allora per il B ci siamo.
Per cui (sempre se le mie supposizioni sono corrette)

SQL:
SELECT
    u.nome, v.cf
FROM
   utente u
      INNER JOIN
   rilanciata r ON u.login = r.login
      INNER JOIN
   vendita v ON r.ID_asta= v.ID_asta
GROUP BY
   u.login
HAVING
   count(u.login) > 1
u.login deve comparire nella clausola SELECT (e pure u.nome e v.cf nel GROUP BY)
 
  • Mi piace
Reazioni: Tidus88

Tidus88

From another world
Utente Èlite
2,044
1,738
CPU
Ryzen 5600X
Dissipatore
Deepcool GAMMAX 400
Scheda Madre
Asus Prime B450-Plus
HDD
MX-500 500GB
RAM
Ballistix 16GB DDR4 3000Mhz
GPU
RTX 3060Ti Dual ASUS
Audio
Edifier R1280db
Monitor
Hisense H55U7A
PSU
Sharkoon Silentstorm Icewind 550W
Case
Corsair 275R Airflow White
Net
SkyWifi FTTH
OS
Windows 10
Dipende, io ho usato la sintassi di MySQL, ma in SQL Server è necessario fare come dici tu ;)
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili