[英]How do I select distinct rows and cross check in another table?
我有3個表, users
和tasks
以及completed_tasks
。 因此,基本上我想選擇user_id = 2
所有任務,並檢查該任務在另一個表中是否不存在。所以這是我的表:
users
表:
+----+-------+
| id | name |
+----+-------+
| 1 | John |
| 2 | Sally |
+----+-------+
tasks
表:
+----+-----------+---------+
| id | task_name | user_id |
+----+-----------+---------+
| 1 | mop floor | 2 |
| 2 | dishes | 1 |
| 3 | laundry | 2 |
| 4 | cook | 2 |
+----+-----------+---------+
completed_tasks
表:
+----+---------+---------+
| id | task_id | user_id |
+----+---------+---------+
| 1 | 1 | 2 |
+----+---------+---------+
這是我當前用於MySQL數據庫的SELECT
代碼:
$db = "SELECT DISTINCT tasks.task_name, users.name FROM tasks LEFT JOIN ON users.id = tasks.user_id WHERE tasks.user_id = 2";
我遇到的問題是:我希望它在completed_tasks
表中搜索,如果該任務存在,則不要選擇該任務。
我嘗試通過添加以下內容來做到這一點,但是它沒有用:
LEFT JOIN completed_tasks ON completed_tasks.user_id = 2
那是行不通的,因為如果我有多個已完成的任務,它將一並忽略。
我希望最終結果應返回任務3和4的用戶名和任務名。
另外,性能對我的應用程序至關重要 。 我可以使用PHP並遍歷數組並對每個數組進行SELECT
,但這對性能不利。
您有幾種方法可以做到這一點。
您可以使用LEFT JOIN
,然后在可選表中檢查NULL
。
SELECT a.name, b.task_name
FROM users a
JOIN tasks b ON a.id = b.user_id
LEFT JOIN completed_tasks c ON c.task_id = b.id AND c.user_id = b.user_id
WHERE c.id IS NULL
;
您可以執行NOT EXISTS
子查詢
SELECT a.name, b.task_name
FROM users a
JOIN tasks b ON a.id = b.user_id
WHERE NOT EXISTS (
SELECT 1
FROM completed_tasks c
WHERE c.task_id = b.id AND c.user_id = b.user_id)
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.