Sto lavorando a un'applicazione per la prenotazione dei dipendenti. Ho due entità differenti, Progetti e Utenti a cui è stato assegnato un numero variabile di abilità.Come confrontare/confrontare i valori in due gruppi di risultati in SQL Server 2008?
Ho una tabella di abilità con le diverse competenze (colonne: id, nome) mi registro delle competenze degli utenti in una tabella chiamata UserSkills (con due colonne di chiave esterna: fk_user e fk_skill) posso registrare le competenze del progetto in un'altra tabella denominata ProjectSkills (con due colonne chiave esterna: fk_project e fk_skill).
Un progetto può richiedere forse 6 diverse abilità e gli utenti al momento della registrazione impostano anche le loro Abilità.
La parte difficile è quando devo trovare utenti per i miei progetti in base alle loro competenze. Mi interessano solo gli utenti che incontrano che hanno TUTTE le competenze richieste dal progetto. Gli utenti sono spesso autorizzati ad avere più esperti richiesti.
Il seguente codice non funziona, (e anche se lo facesse, non sarebbe molto prestazioni amichevole), ma illustra la mia idea:
SELECT * FROM Users u WHERE
(SELECT us.fk_skill FROM UserSkills us WHERE us.fk_user = u.id)
>=
(SELECT ps.fk_skill FROM ProjectSkills ps WHERE ps.fk_project = [some_id])
sto pensando di fare la mia funzione che prende due variabili TABLE, e poi elaborando il confronto in questo (una sorta di funzione IN modificata), ma preferirei trovare una soluzione che sia più adatta alle prestazioni.
che sto sviluppando in SQL Server 2008.
Apprezzo molto tutte le idee o suggerimenti su questo. Grazie!
OMG! Hai risposto con la risposta corretta dopo solo 2 minuti e mezzo! Tu sei il mio eroe! ;) Questa è stata la mia prima domanda su StackOverflow, ma sicuramente non è la mia ultima ... Grazie, il tuo aiuto è molto apprezzato! –
Zounds. C'è un sito web da qualche parte che enuncia e chiarisce i come e perché per questo uso di sottoquery correlate? –
'@Philip Kelley': Attualmente sto scrivendo una serie di articoli su' NOT IN' vs 'NOT EXISTS' vs' LEFT JOIN/IS NULL' in diversi 'RDBMS'. – Quassnoi