簡體   English   中英

如何在一對多聯接中獲取NULL記錄數

[英]How to get count of NULL records in one-to-many join

我有一個accountplan表,在該表中,用戶帳戶在給定時間可以沒有任何計划,也沒有與之關聯的單個/多個或無效的計划。

account表:

+---------+-------------+---+
|   ID    | account_id  | ..|
+---------+-------------+---+
|   1     |   111111    |   |
|   2     |   222222    |   |
|   3     |   333333    |   |
|   4     |   444444    |   |
+---------+-------------+---+

plan表:

+----+--------------------+----------------+-----------------+---------------------+---------------------+
| 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_dateNULL則認為關聯計划處於活動狀態。 我試圖提出一個查詢,該查詢將返回僅與inactive計划相關聯的帳戶列表或計數。 基於上述內容,它將是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 

我認為還可以。

SELECT
    p.*
FROM
    Plan
INNER JOIN Account a USING (account_id)
WHERE p.account_id NOT IN (
    SELECT p2.account_id FROM Plan p2 WHERE p2.end_date IS NULL
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM