|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Mar 2006
Città: Napoli
Messaggi: 170
|
[SQL] Select di elementi
Salve ragazzi,
vi porrò probabilmente un quesito banale, ma io non riesco ad uscirne. Dunque, la specifica è la seguente: voglio estrarre dalla tabella gli OID_USER che hanno OID_ROLE = 1 e OID_ROLE = 3 Tabella OID | OID_USER | OID_ROLE 1 | 1 | 1 2 | 2 | 3 3 | 3 | 3 4 | 1 | 3 5 | 5 | 1 Quindi in teoria il risultato della query dovrebbe essere OID | OID_USER | OID_ROLE 1 | 1 | 1 4 | 1 | 3 GRAZIE |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
Codice:
.... where OID_ROLE in (1,3)
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Mar 2006
Città: Napoli
Messaggi: 170
|
|
![]() |
![]() |
![]() |
#4 | |
Member
Iscritto dal: May 2009
Messaggi: 186
|
Quote:
Ultima modifica di ESSE-EFFE : 15-03-2013 alle 16:25. |
|
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Mar 2006
Città: Napoli
Messaggi: 170
|
Il risultato che ho espresso originariamente è quanto mi aspetterei da una query che non riesco a costruire.
Probabilmente non riesco a spiegarmi perchè sono confuso... dunque io voglio estrarre dalla tabella tutti i record dove ogni OID_USER ha OID_ROLE = 1 e OID_ROLE = 3. Il caso specifico io lo devo generalizzare per una mia applicazione, in altri termini ho come parametro di confronto gli OID_ROLE e devo estrarmi gli OID_USER che hanno precisamente tutti gli OID_ROLE messi a confronto (quindi credo sia una AND tra gli OID_ROLE). |
![]() |
![]() |
![]() |
#6 | |
Member
Iscritto dal: May 2009
Messaggi: 186
|
Quote:
Codice:
SELECT T.OID, T.OID_USER, T.OID_ROLE FROM T LEFT JOIN (SELECT OID_USER, COUNT(OID_USER) AS C FROM T WHERE (OID_ROLE = 1) OR (OID_ROLE = 3) GROUP BY OID_USER) AS T2 ON T.OID_USER = T2.OID_USER WHERE (T2.C > 1) |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
SELECT oid_user FROM Tabella WHERE OID_ROLE=1
INTERSECT SELECT oid_user FROM Tabella WHERE OID_ROLE=3 che e' SQL 99 standard Se il vostro motore non ce l'ha, non e' standard e pertanto fa pena.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Mar 2006
Città: Napoli
Messaggi: 170
|
entrambe le query ritornano risultati compatibili.
Sorge però un malfunzionamento quando inserisco, nel caso specifico un 3° ruolo per l'utente con OID_USER = 1: nel dettaglio Tabella OID | OID_USER | OID_ROLE 1 | 1 | 1 2 | 2 | 3 3 | 3 | 3 4 | 1 | 3 5 | 5 | 1 6 | 1 | 2 (nuovo record rispetto alla tabella precedente) Se volessi tutti gli OID_USER che hanno associati SOLO i ruoli 1 AND 3, le query che mi avete gentilmente proposto non ritornano il risultato voluto, ma mi ritorna sempre OID_USER = 1 (il che nel caso specifico non è vero, perchè allo User 1 è associato anche il ruolo 2) |
![]() |
![]() |
![]() |
#9 | |
Member
Iscritto dal: May 2009
Messaggi: 186
|
Quote:
|
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
o MINUS su Oracle (EXCEPT non lo supporta)
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:12.