我有一个帐户
和计划
表,其中用户的帐户在给定时间可以没有与其关联的单个/多个或非事件计划。
帐户
表:
+---------+-------------+---+
| ID | account_id | ..|
+---------+-------------+---+
| 1 | 111111 | |
| 2 | 222222 | |
| 3 | 333333 | |
| 4 | 444444 | |
+---------+-------------+---+
计划
表:
+----+--------------------+----------------+-----------------+---------------------+---------------------+
| id | account_id | attribute_key | attribute_value | start_date | end_date |
+----+--------------------+----------------+-----------------+---------------------+---------------------+
| 1 | 111111 | RPC | AB | 2011-10-01 00:00:00 | NULL |
| 2 | 111111 | RPC | CND | 2011-10-01 00:00:00 | NULL |
| 3 | 222222 | RPC | IA | 2011-10-01 00:00:00 | 2015-04-01 00:00:00 |
| 4 | 222222 | RPC | CND | 2011-10-01 00:00:00 | 2015-04-01 00:00:00 |
| 5 | 333333 | RPC | IA | 2011-10-01 00:00:00 | 2015-04-01 00:00:00 |
| 6 | 333333 | RPC | CND | 2011-10-01 00:00:00 | NULL |
+----+--------------------+----------------+-----------------+---------------------+---------------------+
如果 end_date
为 NULL
,则关联计划被视为有效。
我正在尝试提出一个查询,该查询将返回仅与非事件
计划关联的帐户列表或计数。根据上面的内容,它将是 222222
,因为它有两个与之关联的计划,但都被标记为非事件状态。:
+----+--------------------+----------------+-----------------+---------------------+---------------------+
| id | account_id | attribute_key | attribute_value | start_date | end_date |
+----+--------------------+----------------+-----------------+---------------------+---------------------+
| 3 | 222222 | RPC | IA | 2011-10-01 00:00:00 | 2015-04-01 00:00:00 |
| 4 | 222222 | RPC | CND | 2011-10-01 00:00:00 | 2015-04-01 00:00:00 |
+----+--------------------+----------------+-----------------+---------------------+---------------------+
最佳答案
在派生表(子查询)中,您可以获得仅包含“非事件计划”的 account_id
值列表:
SELECT account_id
FROM plan
GROUP BY account_id
HAVING COUNT(end_date IS NULL) = 0 /* No plan with null end date */
现在,您可以使用此子查询连接回 plan
表,以获取该 account_id
的所有计划:
SELECT p.*
FROM plan AS p
JOIN (
SELECT account_id
FROM plan
GROUP BY account_id
HAVING COUNT(end_date IS NULL) = 0
) AS dt ON dt.account_id = p.account_id
关于mysql - 如何获取一对多连接中 NULL 记录的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57686491/