我在创建一个在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?
最好的问候&周末愉快!
答案 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的记录,我们限制类型。
祝你好运。