2017-02-13 19 views
2
I have a table test 

ID  Status  

1  A  
1  C  
2  A 
3  A 
4  A 
4  C 
4  A 
4  C 
5  A 


Desire Output 

ID  Status 
1  A 
1  C  
4  A 
4  C 
4  A 
4  C 

` 我想這加入同一個表越來越重複的行對於一些ID

select * from test 
join 
    (
     select id from test t 
     where status='c' 
    ) b 
on b.id=test.id 

它工作正常的ID = 1,其中,它給了我2排,但對於ID = 4它給了我8行我不知道我在做什麼錯

回答

1

您的查詢唯一的問題是,子查詢當前將返回多個具有C狀態的ID。這裏的一個選擇是在子查詢中使用GROUP BY ID來限制每個ID只出現一次。

SELECT t1.ID, t1.Status 
FROM test t1 
INNER JOIN 
(
    SELECT ID 
    FROM test 
    WHERE Status = 'C' 
    GROUP BY ID 
) t2 
    ON t1.ID = t2.ID 
+0

喜添我得到6行的一些ID,其中在數據庫中只有4 –

+0

@RedDevil我得到你想要的輸出,當我在本地運行此查詢。您的數據必須有其他問題。 –

+1

我現在明白了,謝謝Tim的回覆!!!!!! –

1

你得到8行,因爲你的ID 4有更多的 'CS' 然後就1

如果只是運行

select id from test t 
    where status='c' 

你會得到

1, 4, 4 

由於結果

所以在你的NER選擇具有

select DISTINCT id from test t 
    where status='c' 
-1

嘗試,如果你想要去的需要的輸出,然後使用count嘗試:

SELECT 
    t1.ID, t1.Status 
FROM 
    test t1 
GROUP BY 
    t1.ID, t1.Status 
Having 
    COUNT(t1.ID) > 1 
+1

需求是'C'是一個或更多的計數,而不是任何具有兩個或更多計數的ID(再次,不是我的downvote)。 –

-1

如果使用計數你內心的選擇,你並不需要篩選的任何具體情況:

SELECT t1.ID, t1.Status 
FROM [test] t1 
INNER JOIN 
(
    SELECT ID 
    FROM [test] 
    GROUP BY ID 
    HAVING COUNT(*) > 1 
) t2 
    ON t1.ID = t2.ID 
+1

我不確定OP是否希望這樣,除了您的查詢是我的答案的剪切和粘貼副本(不是我的downvote)。 –

+0

剪切並粘貼是的。但是從這個問題;) – shove