sql >> Databáze >  >> RDS >> Mysql

MySQL:Načítání ID, kde přesně 2 řádky sdílejí stejné ID, ale mají různá ID uživatele

Zde je výkonný přístup, který vůbec nepoužívá žádné poddotazy. Výsledky můžete jednoduše odfiltrovat v Having klauzule pomocí podmíněné agregace:

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(*) 

Výsledek

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

Zobrazit na DB Fiddle

Další možná varianta podmíněné agregace je:

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. Jak zkontrolovat, zda existuje uživatel postgres?

  2. Zahrnout výsledky null do group_concat

  3. Objekt s možnou hodnotou Null musí mít hodnotu #2

  4. Android – lepší přístup při načítání obrázků z SD KARTY