我的JOIN遇到了一些困难,IS NULL ..
基本上我想要做的就是找到所有与我指定的某些群组类别ID不同的成员。
SELECT m.* FROM elvanto_members AS m
LEFT JOIN elvanto_groups AS g ON g.deleted = 0
LEFT JOIN elvanto_groups_categories AS gc ON gc.group_id = g.id AND (gc.category_id = '1' OR gc.category_id = '2')
WHERE gr.id IS NULL
有些成员完全不属于任何组别类别,这就是为什么我将其作为LEFT JOIN。
我有道理吗?你知道如何解决这个问题吗?
答案 0 :(得分:1)
试试这个:
SELECT m.* FROM elvanto_members AS m
WHERE
not exists
(
SELECT 1 FROM
elvanto_groups AS g
INNER JOIN elvanto_groups_categories AS gc ON
gc.group_id = g.id
WHERE
gc.category_id IN ('1','2') AND
g.id = m.group_id AND
g.deleted = 0
)
答案 1 :(得分:1)
SELECT m.*
FROM elvanto_members AS m
LEFT JOIN elvanto_groups AS g ON g.id = m.group_id AND g.deleted = 0
LEFT JOIN elvanto_groups_categories AS gc ON gc.group_id = g.id
AND gc.category_id IN ('1','2')
WHERE gc.group_id IS NULL
GROUP BY m.*
我填写了问题中遗漏的内容
category_id
真的是字符串类型吗?我希望它是数字的。然后这个表达式应该是:
AND gc.category_id IN (1,2)