2017-04-05 8 views
-1

私の質問は、私は比較的大きなテーブルを持っています(2百万行まで)。特定の条件を持つMySQL Self Join

表は、

id Action user_id  Date 
----------------------------------- 
1  FOP  userx  date1 
2  POP  userx  date2 
3  FOP  userx   NULL 
4  FOP  usery  date4 
5  POP  usery  date5 
6  FOP  userz  date6 
7  POP  userz  date7 
8  FOP  userz   NULL 
9  FOP  usert  date9 
10  POP  usert  date10 
11  FOP  usert  date11 
12  POP  usert  date12 

テーブルでは、FOPがあり日付(日付= NULL)がない場合は、ユーザーがアクティブであることを示します。私は非アクティブなユーザーを探していますので、FOPを持つユーザーに日付= NULLを持たせたくありません。 POPがある場合は、日付が必要です。

具体的には、私の場合、FOPの数はPOPの数と等しくなければなりません。 exempleについては

は:私たちのケースでは、私はちょうどuseryusert年代の情報を取得したいです。

私は効率的にこのテーブルの参加をしませんでした。テーブルは本当に大きいので。あなたのアイデアを

感謝。

答えて

1

これはそれ

SELECT * 
FROM table 
WHERE action = POP 
AND user_id NOT IN (SELECT user_id FROM table WHEREdate = NULL) 
+0

感謝を行う必要があり、これは私にとってとてもシンプルで良いです! –

+0

@KemalDiri問題はありません。この答えが問題の解決策だった場合は、正しい答えとして受け入れることを検討してください – Shogunivar

0

xからすべての情報を取得するにはコードが必要ですが、背景にはあなたの心がありますか?