Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL:Pobieranie identyfikatora, w którym dokładnie 2 wiersze mają ten sam identyfikator, ale mają różne identyfikatory użytkowników

Oto wydajne podejście, bez podzapytań. Możesz po prostu odfiltrować wyniki w Having klauzula, używając agregacji warunkowej:

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

Wynik

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

Wyświetl na DB Fiddle

Inną możliwą odmianą agregacji warunkowej jest:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Znajdź brakujące przerwy w sekwencji mysql

  2. Włącz Entity Framework 6 dla MySql (C#) w WinForms Microsoft Visual Studio 2013

  3. Konwertuj datę na format daty MYSQL

  4. Wstaw bieżącą datę/godzinę za pomocą now() w polu za pomocą MySQL/PHP

  5. Pytasz o rzeczy w pobliżu geolokalizacji?