2014-02-12 28 views
0

我有以下mySQL查詢返回ID的列表。 我想從表「serverking_user」列表中的每個ID刪除行SQL:通過加入選擇的結果刪除

SELECT serverking_user.id FROM (serverking_user 
INNER JOIN serverking_logins 
ON serverking_user.id=serverking_logins.uid) 
WHERE serverking_logins.time < 3600 
GROUP BY serverking_user.id 
HAVING COUNT(serverking_logins.login) = 1 

一種可能是遍歷每個ID通過使用「中」。但是因爲「in」在我的Sql Server上被禁用了,所以我需要用「join」來解決這個問題。

任何想法?

回答

1
DELETE FROM serverking_user 
WHERE EXISTS 
(SELECT * 
FROM (serverking_user 
INNER JOIN serverking_logins 
ON serverking_user.id=serverking_logins.uid) 
WHERE serverking_logins.time < 3600 
GROUP BY serverking_user.id 
HAVING COUNT(serverking_logins.login) = 1) a 
+0

#1093 - 無法在FROM子句中指定目標表'serverking_logins'進行更新 – user1474444

+0

對不起,我有一個與表名不匹配的錯字。再試一次,仔細檢查表名是否準確。 – Sev09

+0

thx,但仍:#1093 - 無法在FROM子句 – user1474444

2

它已經有一段時間,因爲我已經做了MySQL的發展,但如果我沒記錯這應該爲你工作:

DELETE su 
FROM serverking_user su 
INNER JOIN serverking_logins sl 
ON su.id=sl.uid 
WHERE sl.time < 3600 
GROUP BY su.id 
HAVING COUNT(sl.login) = 1 

在一般情況下,如果你想從一個表中刪除記錄在JOIN,你剛過DELETE

更新的查詢指定表(或別名)
看來,MySQL是不喜歡刪去其中分組QUER y參與,所以另一種可能性是使用反連接。但是,我確信此查詢的性能特徵將不理想。相反,使用兩個單獨的查詢可能會更好。儘管如此,這裏是利用溶液反聯接:

DELETE su 
FROM serverking_user su 
INNER JOIN serverking_logins sl 
ON su.id=sl.uid 
LEFT JOIN serverking_logins antisl 
ON sl.uid = antisl.uid 
AND sl.id <> antisl.id 
WHERE sl.time < 3600 
AND antisl.id IS NULL 
+0

#1064 - 您的SQL語法錯誤;請檢查與您的MySQL服務器版本對應的手冊,以便在第6行'GROUP BY su.id HAVING COUNT(sl.login)= 1'附近使用正確的語法 – user1474444

+0

您可以使用反連接,但我不確定如果這將比@ Luaan在下面的回答中描述的兩個單獨的查詢更好。 –

+0

以及這將如何? – user1474444

1

也許你可以存儲表變量的選擇裏面的結果,然後加入了嗎?

declare @Ids table 
(
    Id int 
); 

insert into @Ids (Id) 
SELECT serverking_user.id FROM (serverking_user 
INNER JOIN serverking_logins 
ON serverking_user.id=serverking_logins.uid) 
WHERE serverking_logins.time < 3600 
GROUP BY serverking_user.id 
HAVING COUNT(serverking_logins.login) = 1; 

delete yt from YourTable yt 
inner join @Ids Ids on Ids.Id = yt.id; 

注意,這個一致性取決於你的交易結構,因爲你在這裏做兩個單獨的查詢。

+0

嗯,必須有一個更高性能的解決方案:/ – user1474444

+0

@ user1474444哦,我只注意到現在你正在尋求一個MySQL解決方案。這真的很慢嗎? – Luaan

+0

我不知道會有多慢,但是對我來說這看起來有點複雜,因爲我在sql中不是很好...... – user1474444