我有一张表,我可以用不同的状态存储相同的名称。
|ID|name|state
1 A 1
2 A 2
3 B 3
4 C 1
有3个州1,2,3。
如何找到没有状态3,最多2?
的记录在此示例中,A和C没有状态3,因此它们将是查询的结果:
SELECT * FROM `records` WHERE (`state_id`!=3)
它只返回没有状态3的行,但它可以是该值。
答案 0 :(得分:2)
DISTINCT怎么样而不是?
像
这样的东西SELECT DISTINCT Name
FROM Table1 t
WHERE Name NOT IN (
SELECT Name
FROM Table1 s
WHERE s.State = 3)
答案 1 :(得分:1)
http://www.sqlfiddle.com/#!9/35dbe/2
SELECT r.*
FROM `records` r
LEFT JOIN `records` r3
ON r.name = r3.name
AND r3.state=3
WHERE r3.state IS NULL
答案 2 :(得分:0)
您可以使用条件聚合执行此操作:
select name from t
group by name
having sum(case when state = 3 then 1 else 0 end) = 0