sql >> Databasteknik >  >> RDS >> PostgreSQL

Väljer matchande delmängd i många-till-många-relation

Select project_ID 
from user_projects
where user_ID in (1,2)
group by project_ID
Having count(*) = 2

Du vet att du har 2 användare, du vet att de kommer att vara unika (primärnyckel) så du vet att om det finns 2 poster för samma projekt så är det en du vill ha.

Din fråga indikerade att du har skickat en GIVEN användare därför vet du vilka användare och hur många det finns. ovanstående SQL kan uppdateras för att acceptera parametrar för dessa kända och förblir därmed dynamisk, inte begränsad till bara 2 användare.

where user_ID in (userlist)
having count(*) = (cntuserList)

-----------För att hantera situationen när uppsättningen användare är tom-----

Select P.project_ID 
from Projects P
LEFT JOIN user_projects UP
where (UP.user_ID in (1,2) OR UP.USER_ID is null)
group by project_ID
Having count(*) = 2

Så här är vad det här gör. Den returnerar alla projekt och om det finns en användare som är ansluten till det projektet identifierar den dem. Om du ställer in innehåller användare, filtreras listan över returnerade projekt av den uppsättningen, vilket säkerställer att hela uppsättningen finns i projektet genom have-klausulen.

Om uppsättningen är tom, kommer LEFT join tillsammans med userID is null-satsen att hålla projekten utan användare listade oavsett om uppsättningen är tom eller inte. Ha-satsen kommer att reducera uppsättningen ytterligare till antalet användare du definierade i uppsättningen, ELLER 0 som anger att returnera alla projekt utan tilldelade användare.

Ett ytterligare kantfall som vi inte diskuterat ännu är vad som ska hända om ett projekt innehåller fler användare än vad du definierade i uppsättningen. För närvarande skulle detta projekt återlämnas; men jag är inte säker på att det var vad du ville.

på en sidoanteckning tack för att du fick mig att tänka. Jag kommer inte in i koden lika mycket längre; det är därför jag trollar hit då och då för att se om jag kan hjälpa!



  1. Hur man ställer in Oracle EBS Auditing

  2. PHP/HTML-formuläret uppdaterar inte MySQL

  3. Hur kan jag räkna onlineanvändarna i min ansökan?

  4. Java-fråga med DB Link stänger inte Db Link-anslutningen