Выберите, где столбец не в другом 2 раза - PullRequest
2 голосов
/ 26 сентября 2011

Если у меня есть такой стол, который называется "стол"

+--------------+
| 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' ИЗ 'таблицы' ГДЕ 'id' не в 'c2' 2 раза

Ответы [ 4 ]

7 голосов
/ 26 сентября 2011
SELECT * FROM table WHERE id NOT IN 
(SELECT c2 FROM table GROUP BY c2 HAVING Count(c2) = 2)
1 голос
/ 26 сентября 2011

Пропустить идентификаторы, которые вообще не в C2:

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

ВКЛЮЧИТЬ IDЧТО НЕ В С2:

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
0 голосов
/ 26 сентября 2011
select 
  t1.c1 
from
  t t1,
  t t2
where 
  t1.id = t2.c2
group by
  t1.c1
having 
  count(t2.c2) != 2;  
0 голосов
/ 26 сентября 2011
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...