簡體   English   中英

根據引用行和引用行計算自引用表中的引用

[英]Counting references in a self referenced table based on both the referring and referenced rows

我正在使用自引用外鍵在同一個表中存儲兩個級別的任務(我們稱之為primarysecondary )。 secondary_fortasks.id上的自引用,其中user是對不同表的引用。

每個primary任務都需要 2 個secondary任務來自不同的用戶(每個用戶一個),而不是創建primary任務的用戶來“解決”。 給定一個用戶,我試圖找到一種方法來為該用戶排列未解決的primary任務(以便我可以針對它創建一個新的secondary任務),以最快地完成解決未解決的primary任務。

因此,如果tasks表的狀態如下:

+----+------+---------------+-----------------------------+
| id | user | secondary_for |            desc             |
+----+------+---------------+-----------------------------+
|  1 |    1 | NULL          | Primary Task 1              |
|  2 |    2 | 1             | Update 1 for Primary Task 1 |
|  3 |    3 | 1             | Update 2 for Primary Task 1 |
|  4 |    2 | NULL          | Primary Task 2              |
|  5 |    1 | 4             | Update 1 for Primary Task 2 |
|  6 |    3 | NULL          | Primary Task 3              |
+----+------+---------------+-----------------------------+ 

...和用戶 100(存在於users表中)可用於添加輔助任務,我想顯示一個符合條件的主行 ID 列表,按當前輔助任務的編號排序:

+-----------+
| id |  ctr |
+-----------+
|  4 |    1 |
|  6 |    0 |
+-----------+

此處顯示第 4 行和第 6 行是因為:

  1. 它們是用戶 100 尚未創建的主要任務

  2. 用戶 100 尚未針對這些任務創建次要任務

  3. 他們還沒有所需數量的次要任務(即 2),而不是第 1 行

我是 MySQL 的新手,所以我不知道如何解決這個問題,但這是我到目前為止所得到的:

SELECT secondary_for AS id, COUNT(id) AS ctr FROM tasks
WHERE secondary_for IN
    (SELECT id FROM tasks WHERE secondary_for IS NULL AND user !=100)
    AND user != 100
GROUP BY secondary_for
HAVING COUNT(id) < 2
ORDER BY COUNT(id) DESC

這讓我知道:

+-----------+
| id |  ctr |
+-----------+
|  4 |    1 |
+-----------+

但不顯示第 6 行,該行也符合條件但未檢索到,因為還沒有分配給它的次要任務。

我怎樣才能解決這個問題? 此外,我幾乎可以肯定有一種更有效的方法可以使用 JOIN 構建此查詢,但不知道如何去做。

任何幫助將不勝感激。 提前致謝!

那這個呢?

SELECT A.id, ISNULL(B.ctr,0) AS ctr
FROM tasks A
LEFT JOIN (SELECT secondary_for, COUNT(*) AS ctr
           FROM tasks
           WHERE user!=100
           GROUP BY secondary_for) B
ON A.id=B.secondary_for
WHERE A.secondary_for IS NULL
AND A.user != 100
AND ISNULL(B.ctr,0)<2
ORDER BY ISNULL(B.ctr,0) DESC

暫無
暫無

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

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