我有一個要求,其中如果成員的值等於0,則刪除與該成員相關的所有值。針對成員的不同值的SQL查詢
Eg MemberID Value
1 0
1 123
2 3
3 4
3 0
然後在結果,我應該只得到MEMBERID 2.對於其他成員也有0
我有一個要求,其中如果成員的值等於0,則刪除與該成員相關的所有值。針對成員的不同值的SQL查詢
Eg MemberID Value
1 0
1 123
2 3
3 4
3 0
然後在結果,我應該只得到MEMBERID 2.對於其他成員也有0
值只是使用子查詢:
delete from table1 t1
where t1.MemberId in (select t2.MemberId from table1 t2 where t2.value=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)
根據樣本數據'MemberID = 2'應該出現在結果中,即使它是正數,只是將數據反轉爲負值是不正確的答案。 – Murtaza 2014-09-25 06:55:42
@Murtaza:我的回答對於原始問題是正確的(OP曾要求刪除有0個或更多價值的成員的記錄,Thant是爲什麼我使用了一個負值的記錄)。請訪問以前編輯的問題。既然我的答案不適合當前的問題,我已經更新了它。謝謝! – 2014-09-25 07:09:47
請嘗試:
delete from tbl
where MemberID in (select MemberID from tbl b where b.Value=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)
希望這會有所幫助。
你的意思是從表中刪除這些記錄? – 2014-09-25 05:27:14
_...具有大於0或等於0的值,然後刪除所有值..._這將從您的示例表中刪除所有值。 – CodeNewbie 2014-09-25 05:28:27
你的意思是,如果'MemberID'的'value'值爲'0',那麼刪除所有類似'MemberID'的事件? – 2014-09-25 05:34:23