2017-02-13 44 views
0

该表可以具有多个成员的条目 - 即他可以是多个组的成员。我希望包括所有开始'cr'的团体的成员,但不包括那些也是prodcr成员的那些团体的成员,但它不起作用 - 它包括所有那些是prodcr成员的成员。我花了很多时间在这 - 请告诉我我做错了什么?在字段中包含一些值并排除其他值

select DISTINCT mem_no 
       , first_name 
       , last_name 
       , inits 
       , addr1 
       , post_code 
       , email 
      FROM members m 
      JOIN `group` g 
      USING (mem_no) 
      WHERE ( 
        NOT ('group' = "prodcr") 
      AND (`group` LIKE "cr%") 
       ) 
      ORDER 
       BY last_name ASC 
       , first_name ASC 
      LIMIT 0,500 
+0

显示两个表的结构。两个表中的关键/外键是什么? –

+0

另外......如果你有成员和组,最合乎逻辑的方法就是拥有一个group_member多对多的关系表。 –

回答

0

也许这将帮助:

SELECT DISTINCT mem_no, first_name, last_name, inits, addr1,post_code, email 
     FROM members JOIN group USING (mem_no) 
     WHERE group LIKE "cr%" AND group != "prodcr" 
     ORDER BY last_name ASC, first_name ASC 
     LIMIT 500 

PS:如果你的名字你的表group和你列group别的东西(group is a reserved word),它会更好。

+0

为了解释的目的,我将实际的标签更改为组 - 这是sql中的俱乐部。我曾试过俱乐部<>“prodcr”,但也没有奏效。 – CRG

+0

给我一个你执行这个查询后得到的例子,但你不想得到它作为结果。 –

0

我一直在阅读了每一个网站我可以躺在我的手,它似乎是这是解决方案:

我在情况设置如下它可以帮助其他人有类似的困境

SELECT mem_no,first_name,last_name,inits,addr1,post_code,email FROM members JOIN club USING(mem_no)WHERE club <>'prodcr'AND club LIKE'cr%'and mem_no NOT IN(SELECT mem_no FROM club WHERE club =' prodcr')GROUP BY mem_no ORDER by last_name ASC,名字ASC限制0,500

+0

对不起,但你的查询没有意义,这是多余的,这将需要更多的执行时间。 –

相关问题