MySQL:连接表中的IS NULL

时间:2011-11-30 05:42:31

标签: mysql

我的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。

我有道理吗?你知道如何解决这个问题吗?

2 个答案:

答案 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)