2014-09-25 24 views
0

我有一個要求,其中如果成員的值等於0,則刪除與該成員相關的所有值。針對成員的不同值的SQL查詢

Eg MemberID Value 
     1  0 
     1  123 
     2  3 
     3  4 
     3  0 

然後在結果,我應該只得到MEMBERID 2.對於其他成員也有0

+0

你的意思是從表中刪除這些記錄? – 2014-09-25 05:27:14

+5

_...具有大於0或等於0的值,然後刪除所有值..._這將從您的示例表中刪除所有值。 – CodeNewbie 2014-09-25 05:28:27

+0

你的意思是,如果'MemberID'的'value'值爲'0',那麼刪除所有類似'MemberID'的事件? – 2014-09-25 05:34:23

回答

1

值只是使用子查詢:

delete from table1 t1 
where t1.MemberId in (select t2.MemberId from table1 t2 where t2.value=0) 
+0

這是不正確的,因爲邏輯是刪除值爲0和其他相關(相同的id)記錄以及所有記錄。 – Murtaza 2014-09-25 06:15:36

+0

雅我明白了,但你爲什麼說錯了? – masum7 2014-09-25 06:26:14

+0

Hey Masum7 - 你的邏輯正確,只需要你可以編輯的別名,以便我可以刪除投票。 – Murtaza 2014-09-25 07:17:31

0

要選擇這些記錄,你可以使用:

SELECT MemberID,SUM(CASE WHEN Value=0 THEN 1 ELSE 0 END) as Count 
FROM TableName 
GROUP BY MemberID 
HAVING SUM(CASE WHEN Value=0 THEN 1 ELSE 0 END)=0 

Fiddle Example(使用不同的採樣數據與負值)

若要從表中刪除這些記錄,

DELETE FROM TableName 
WHERE MemberID NOT IN 
(SELECT MemberID 
FROM TableName 
GROUP BY MemberID 
HAVING SUM(CASE WHEN Value=0 THEN 1 ELSE 0 END)=0) 
+0

根據樣本數據'MemberID = 2'應該出現在結果中,即使它是正數,只是將數據反轉爲負值是不正確的答案。 – Murtaza 2014-09-25 06:55:42

+0

@Murtaza:我的回答對於原始問題是正確的(OP曾要求刪除有0個或更多價值的成員的記錄,Thant是爲什麼我使用了一個負值的記錄)。請訪問以前編輯的問題。既然我的答案不適合當前的問題,我已經更新了它。謝謝! – 2014-09-25 07:09:47

1

請嘗試:

delete from tbl 
where MemberID in (select MemberID from tbl b where b.Value=0) 
0

如果你想刪除有一個以上的value >= 0每一個成員,這裏是你的查詢:

DELETE FROM yourTable 
WHERE MemberID IN (SELECT T.MemberID 
        FROM yourTable T 
        WHERE T.Value >= 0 
        GROUP BY T.MemberID 
        HAVING COUNT(T.Value) > 1) 

如果要刪除每個至少有一個value = 0的成員,請查詢:

DELETE FROM yourTable 
WHERE MemberID IN (SELECT T.MemberID 
        FROM yourTable T 
        WHERE T.Value = 0) 

希望這會有所幫助。