我有两张1:m关系的表。需要选择哪些人员记录在id为1和2的操作表中同时包含这两个记录
People
+----+------+--------------+
| id | name | phone_number |
+----+------+--------------+
| 1 | John | 111111111111 |
+----+------+--------------+
| 3 | Jane | 222222222222 |
+----+------+--------------+
| 4 | Jack | 333333333333 |
+----+------+--------------+
Action
+----+------+------------+
| id | PplId| ActionId |
+----+------+------------+
| 1 | 1 | 1 |
+----+------+------------+
| 2 | 1 | 2 |
+----+------+------------+
| 3 | 2 | 1 |
+----+------+------------+
| 4 | 4 | 2 |
+----+------+------------+
Output
+----+------+--------------+----------
|PplId| name | Phone |ActionId |
+-----+------+-------------+----+-----
| 1 | John | 111111111111| 1 |
+-----+------+-------------+----+-----
| 1 | John | 111111111111| 2 |
+-----+------+-------------+----+-----
返回同时具有actionid 1和actionid 2的人员的记录(具有actions中的记录)。
3条答案
按热度按时间798qvoo81#
窗口函数是一种方法。假设一个人的动作不重复:
在我看来,获得两行的动作细节似乎是多余的-你已经知道的行动。如果你只想要人民,那么
exists
我想到:使用正确的索引(
actions(pplid, action)
),我希望有两个exists
比…快group by
.uinbv5nw2#
使用subquery和join尝试下面的查询
ckx4rj1h3#
试试这个