mysql过滤同名多条记录(不同状态)

时间:2015-05-05 12:13:14

标签: mysql database

我有一张表,我可以用不同的状态存储相同的名称。

|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的行,但它可以是该值。

3 个答案:

答案 0 :(得分:2)

DISTINCT怎么样而不是?

这样的东西
SELECT DISTINCT Name
  FROM Table1 t 
  WHERE Name NOT IN (
    SELECT Name 
    FROM Table1 s 
    WHERE s.State = 3)

SQL Fiddle DEMO

答案 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

小提琴http://sqlfiddle.com/#!9/a8bb5/2