sql >> Databasteknik >  >> RDS >> Mysql

MySQL:Hämtar ID där exakt 2 rader delar samma ID men har olika användar-ID

Här är ett effektivt tillvägagångssätt som inte använder några underfrågor alls. Du kan helt enkelt filtrera bort resultat i Having klausul, med villkorlig aggregering:

SELECT 
  conversation_id 
FROM assoc_user__conversation 
GROUP BY conversation_id 
HAVING 
  -- all the rows to exists only for 1000001 or 1000002 only
  SUM(user_id IN (1000001, 1000002)) = COUNT(*) 

Resultat

| conversation_id |
| --------------- |
| 10              |

Visa på DB Fiddle

En annan möjlig variant av villkorlig aggregering är:

SELECT 
  conversation_id 
FROM assoc_user__conversation 
GROUP BY conversation_id 
HAVING 
  -- atleast one row for 1000001 to exists
  SUM(user_id = 1000001) AND  
  -- atleast one row for 1000002 to exists
  SUM(user_id = 1000002) AND  
  -- no row to exist for other user_id values
  NOT SUM(user_id NOT IN (1000001, 1000002)) 


  1. mysql-serverportnummer

  2. Hur är det bättre att sammanfoga några tabeller (inklusive underfrågor) i en fråga?

  3. Ersätt ett ord i BLOB-text med MySQL

  4. PHP salt och hash SHA256 för inloggningslösenord