MYSQL。让我介绍我的表格,缩小:
我有一个表users
,其中包含id
行。
我的表tasks
包含行id
和title
。
我有一个表users_tasks
,它们将两者连接起来,行id
,uid
(对于users.id)和tid
(对于tasks.id)。
现在,如果已将6
ID分配给该任务的用户(= users_tasks
中的条目存在uid
,我希望获得所有任务的列表,并提供相关信息) = 6
)
开始很简单,得到所有任务:SELECT * FROM tasks
但现在是什么?我尝试继续LEFT JOIN到users_tasks
,但结果太奇怪了,看起来不正确的方向......我需要像条件连接这样的东西吗?我很困惑
我喜欢的结果看起来像这样(假设有4个任务,用户6分配给1和3):
tasktitle | entry for user 6
-----------------------------
task 1 | 1
task 2 | 0
task 3 | 1
task 4 | 0
编辑对tombom的评论:
SELECT
*, EXISTS (SELECT 1 FROM users_tasks ut WHERE tasks.id = ut.tid AND ut.uid = 6)
FROM
tasks
答案 0 :(得分:1)
您根本不需要加入。
SELECT
*
FROM
tasks
WHERE EXISTS (SELECT 1 FROM users_tasks ut WHERE tasks.id = ut.tid AND ut.uid = 6)
这应该比连接执行得更快,因为EXISTS ()
会在找到行后立即返回,而连接会返回所有匹配的行。