mysql查询获取不重复的数据和多个where语句

时间:2016-02-05 18:10:00

标签: mysql

我在创建一个在WHERE中应该有两个AND语句的查询时遇到了一些麻烦。

示例表:

type_id       type
00034         1
00035         2
00035         3
00036         2
00037         3

我希望得到没有重复ID的type_id且类型不是1或3.预期的结果是00036.但是不起作用:

SELECT type_id
FROM test
WHERE type_title !=1
GROUP BY type_id
HAVING count(type_id) = 1

结果是:

00036
00037

如何只获得00036?

最好的问候&周末愉快!

3 个答案:

答案 0 :(得分:1)

假设表名是“test_table”,那么以下查询将返回您需要的内容:

select t1.type_id
from test_table t1
join test_table t2 on t1.type_id = t2.type_id
where t2.type not in(1,3)
group by t1.type_id
having count(t1.type_id) = 1;

答案 1 :(得分:0)

这解决了问题的第一部分......

  SELECT x.*
    FROM test x 
   WHERE x.type NOT IN(1,3)

......这解决了第二部分......

    LEFT
    JOIN test y
      ON y.type <> x.type
     AND y.type_id = x.type_id 
   WHERE y.type_id IS NULL;   

......把它放在一起看起来像这样......

  SELECT x.*
    FROM test x
    LEFT
    JOIN test y
      ON y.type <> x.type
     AND y.type_id = x.type_id
   WHERE x.type NOT IN(1,3)
     AND y.type_id IS NULL;

答案 2 :(得分:0)

一种方法是首先获取所有不具有重复type_id的记录的列表。一旦你解决了这个问题,消除其他类型的东西就很容易了。这应该可以为您提供所需的结果:

SELECT test_outer.type_id FROM test AS test_outer

WHERE test_outer.type_id NOT IN(

    SELECT type_id FROM test
    WHERE type_id IN (
    SELECT type_id FROM test GROUP BY type_id
    HAVING count(*) > 1)

)

AND test_outer.type <> 1  
AND test_outer.type <> 3;

从内到外看,我们首先检查是否有重复的记录。然后我们使用它来获取与副本具有相同type_id的所有记录(包括我们找到的重复记录)。然后我们得到所有没有那些type_id的记录,我们限制类型。

祝你好运。