MySQL Self加入特定条件

时间:2017-04-05 09:53:24

标签: mysql join optimization self-join

我的问题是,我有一个相对较大的表(约2百万行)。

表就像;

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且没有日期(Date = NULL),则表示用户处于活动状态。我正在寻找非活跃用户,因此我不想让拥有日期= NULL的FOP的用户。如果有POP,我们必须有一个日期。

具体来说,在我的情况下,FOP的数量应该等于POP的数量。

例如:在我们的例子中,我只想获得 usery usert 的信息。

我没有有效地加入这张桌子。因为桌子很大。

感谢您的想法。

2 个答案:

答案 0 :(得分:1)

这应该这样做

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

答案 1 :(得分:0)

你需要一些代码来获取x中的所有信息,但是在后台这样你的想法吗?