2011-09-26 35 views
2

如果我有表像這個名爲「表」選擇其中列未在其他一個2倍

+--------------+ 
| 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」從「表」,其中「身份證」不是「C2」 2倍

+1

請給想要的結果與示例數據一起使用,以便我們能夠弄清楚您所要求的內容。 –

+0

它是某種鄰接關係,id和c2之間的子父母關係? – Aitor

+0

你的意思是2次或2次或更多次? –

回答

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

沿着這些線似乎有可能,但他們想要2? –

+1

他可以改變任何其他COUNT(C2)= 2,不認爲他需要幫助這種條款:) –

+2

原來的問題說了2次。如果它的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 
1

SKIP IDS未在C2 AT ALL:

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 

OUTPUT:

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

包含ID WHICH NOT IN C2:

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 

OUTPUT:

id c1 gcount 
3 c 1 
4 d 1 
5 e 1 
6 f 0 
7 g 0 
8 h 0 
0
select 
    t1.c1 
from 
    t t1, 
    t t2 
where 
    t1.id = t2.c2 
group by 
    t1.c1 
having 
    count(t2.c2) != 2;