2016-04-06 15 views
0

ich einen Tisch hatte:Wie Mysql Rekord in einzigartigen Array erhalten

---------------------- 
| user_id | marker_id| 
---------------------- 
| 1 | 1 | 
-------- 
| 1 |2 | 
-------- 
| 2 |1 | 
-------- 
| 2 |2 | 
-------- 
| 2 |3 | 
-------- 
| 3 |1 | 
-------- 

Ich will bekommen einzigartiges User_id hat marker_id = (1,2). Erhalten Sie nicht user_id hat marker_id = (1,2,3). Wie erhält man user_id = 1 und nicht user_id = 2?

Antwort

1
select distinct user_id 
from table_name 
where marker_id in (1,2) 
+0

Aber das Ergebnis enthält user_id = 2. Ich will nur marker_id in (1,2) und total_marker_id = 2. Es bedeutet user_id hat genau marker_id = (1,2) nicht mehr (1,2,3,4) – datnq

+0

Bitte fügen Sie Ihr erwartetes Ergebnis in Ihre Frage –

+0

danke . Ich habe die Antwort von @Gordon – datnq

1

Ein Verfahren verwendet group by:

select user_id 
from t 
group by user_id 
having sum(marker_id = 1) > 0 and 
     sum(marker_id = 2) > 0 and 
     sum(marker_id not in (1, 2)) = 0; 

Jede Bedingung in der having Klausel testet einen der Werte. Die ersten Tests für marker_id = 1 und die > 0 sagt, es gibt mindestens eine. Die zweite testet ähnlich für marker_id = 2. Die dritte besagt, dass es keine anderen Marker-IDs gibt.

Ich nenne diese Art von Abfrage eine "Set-in-Sets" Unterabfrage (Sie suchen nach Marker-IDs für jeden Benutzer). Ich finde, dass group by/having eine flexible Möglichkeit ist, diese Abfragen zu lösen.

+0

Danke, es ist großartig! – datnq

Verwandte Themen