1

数十回試行した後も、まだ間違った結果が得られたので、助けを求めたほうがよいと思いました。

テーブル:

labels
    id, user_id, name

messages_labels
    id, message_id, label_id

labels.idを指すmessage_labels.label_id

message-id と user_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 JOINlabel_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

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 に答える