1

经过几十次尝试,我仍然得到错误的结果,所以我想我最好寻求帮助。

表:

labels
    id, user_id, name

messages_labels
    id, message_id, label_id

labels.idmessage_labels.label_id

给定消息 ID 和用户 ID,如何获得正确的结果未使用标签?未使用的标签是指对于给定的消息 ID 没有条目的message_labels标签,基本上只选择要添加到该消息中的尚未用于该消息的标签。

这意味着类似...

SELECT l.id, l.name
FROM labels l
INNER/LEFT JOIN messages_labels ml ON (l.id=ml.label_id)
WHERE... user_id=:user_id ...

... and `message_id <> :message_id`

??

4

2 回答 2

2

这应该有效:LEFT JOIN在 label_id 和消息 id 上,任何没有 ML 记录的都是你想要的

SELECT 
    l.id, l.name
FROM labels l
LEFT JOIN message_labels ml
    ON l.id = ml.label_id
    AND message_id = :message_id
WHERE l.user_id = :user_id
AND ml.id IS NULL
于 2012-08-02T17:02:23.600 回答
1

一种方法:

SELECT labels.*, count(messages_labels.id) AS mlid
FROM labels
JOIN messages_labels ON labels.id = messages_labels.label_id
WHERE (user_id = :user_id) AND (message_id = :message_id)
GROUP BY labels.id
HAVING (mlid = 0)

如果我正确地阅读了您的问题。

于 2012-08-02T16:55:25.463 回答