1

MYSQL。让我介绍一下我的表格,缩小:

我有一个users带有行的表id

我有一张桌子tasks,里面有行idtitle

我有一个表users_tasks,将它们与行iduid对于 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
4

1 回答 1

1

你根本不需要加入。

SELECT
*
FROM
tasks
WHERE EXISTS (SELECT 1 FROM users_tasks ut WHERE tasks.id = ut.tid AND ut.uid = 6)

这应该比连接执行得更快,因为EXISTS ()一旦找到行就返回,而连接返回所有匹配的行。

于 2013-03-27T11:18:25.940 回答