匿名用户
1级
2014-12-11 回答
SELECT * FROM test WHERE state IS NULL AND 1 > (SELECT COUNT(*) FROM test t WHERE t.state = 0)
追问:
请问 SELECT * FROM test WHERE state IS NULL AND 1 和(SELECT COUNT(*) FROM test t WHERE t.state = 0) 是同一条数据
查询1的时候
如果 2的state为0的话也得查出来得
追答:
哦,刚看明白,我再改改。
追问:
字段 id name state
1 你好 null
2 你 null
1 你 0
2 你好 0
查询肯定是一条条查询得SELECT * FROM test WHERE state IS NULL查出一条,比较下当前这条,在test中有无state为0的 ,注意是当前
麻烦了哈
追答:
SELECT * FROM test WHERE id NOT IN(SELECT id FROM test WHERE state = 0 ) AND state IS NULL
追答:
SELECT * FROM test WHERE id NOT IN(SELECT id FROM test WHERE state = 0 ) AND state IS NULL
追问:
谢谢哈 还是会查出来
比如
1 你好 null
2 你 null
1 你 0
会把 1 你好 null 查出来
追答:
SELECT * FROM test WHERE id NOT IN(SELECT id FROM test WHERE state = 0 ) AND state IS NULL
结果:
追问:
额额 我再看看哈
追答:
我的state是int型,你要是字符窜就改改。
追问:
恩恩 改好了
再请教下 如果有的id没有为Null但是state为0 像这种数据不用过滤 该怎么改?
谢谢了
追答:
如果有的id没有为Null但是state为0 像这种数据不用过滤 该怎么改?
没明白。是不是含有state为null的且含有state为0的就不查,否则都查出来。
那么:
SELECT * FROM test WHERE id NOT IN(
SELECT id FROM test WHERE (id IN(SELECT id FROM test WHERE state = 0 ) AND state IS NULL )
)
追问:
意思是比如
1 你好 null
2 你 null
1 你 0
null 好 0
查询得时候把 2 你 null 、null 好 0 这两条查出来
第二条没id 不应该查不出来
追答:
SELECT * FROM test WHERE id IS NULL OR ( id NOT IN ( SELECT id FROM test WHERE state = 0 AND id IS NOT NULL ) AND state IS NULL)
这样