选择列不在另一列中的位置2次

时间:2011-09-26 13:43:01

标签: mysql sql

如果我有这样的表名为" table"

+--------------+
| id | c1 | c2 |
+--------------+
| 1  | a  | 0  |
| 2  | b  | 1  |
| 3  | c  | 1  |
| 4  | d  | 2  |
| 5  | e  | 2  |
| 6  | f  | 3  |
| 7  | g  | 4  |
| 8  | h  | 5  |
+--------------+

我想选择' c1' FROM' table'在哪里' id'不在' c2' 2次

4 个答案:

答案 0 :(得分:7)

SELECT * FROM table WHERE id NOT IN 
(SELECT c2 FROM table GROUP BY c2 HAVING Count(c2) = 2)

答案 1 :(得分:1)

完全没有C2的跳过ID:

SELECT d.id, d.c1, g.gcount
FROM 
(
   SELECT c2 as gc2, COUNT(*) as gcount
   FROM @data
   GROUP BY c2
) g
INNER JOIN @data d ON d.id = g.gc2 AND gcount != 2

<强>输出:

id | c1 | gcount
3  | c  |   1
4  | d  |   1
5  | e  |   1

包含不在C2中的ID:

SELECT d.id, d.c1, ISNULL(g.gcount, 0) as gcount
FROM 
(
   SELECT c2 as gc2, COUNT(*) as gcount
   FROM @data
   GROUP BY c2
) g
RIGHT JOIN @data d ON d.id = g.gc2
WHERE gcount IS NULL OR g.gcount != 2

<强>输出:

id  c1  gcount
3   c   1
4   d   1
5   e   1
6   f   0
7   g   0
8   h   0

答案 2 :(得分:0)

select t.*
from table t
left outer join (
    select c2, count(*) as Count
    from table
    group by c2
) tc on t.id = tc.c2
where Count is null or Count < 2

答案 3 :(得分:0)

select 
  t1.c1 
from
  t t1,
  t t2
where 
  t1.id = t2.c2
group by
  t1.c1
having 
  count(t2.c2) != 2;