2011-11-30 105 views
0

我有一些困难,我JOIN和IS NULL ..MySQL的: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 

有些成员根本就没有任何分类,这就是为什么我将它作为左连接。

我有道理吗?你有什么想法如何解决这个问题?

+1

你没有一个名为gr的表 - 这个表应该是什么别名? –

回答

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 
) 
+0

我假设成员和组之间根据名为group_id的成员的属性进行连接。 –

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)