2009-10-18 53 views
1

我可以用這個SQL條款刪除記錄,我要離開總是一個記錄,如果表中的記錄數= 1 SQL

DELETE FROM TABLE WHERE ID = 2 

我要永遠留下一個記錄,如果表數= 1即使「ID = 2" 。我怎樣才能做到這一點?

+2

你能澄清你想要什麼?你想刪除表中除了一行以外的所有行嗎?或者你只想刪除'ID = 2 *'這一行*除非*它是表中唯一的一行? – VoteyDisciple 2009-10-18 15:16:40

+0

是的,正如你所說我可以刪除表中的所有行,除了一個。但是,除了一個可以不是靜態值。 Andomar的建議效果很好。感謝您的關注。 – Kerberos 2009-10-18 19:47:22

回答

3

添加一個WHERE子句,以確保有多個行:

DELETE FROM TABLE 
WHERE ID = 2 
AND (SELECT COUNT(*) FROM TABLE) > 1 
1

未經測試,但這可能有用嗎?

DELETE FROM TABLE WHERE ID = 2 LIMIT (SELECT COUNT(*)-1 FROM TABLE WHERE ID=2); 

也許在if語句添加,以保證計數高於1

+2

MySQL不允許使用變量限制條款,請參閱:http://bugs.mysql.com/bug.php?id=6673 – Andomar 2009-10-18 16:18:54

+0

哦,那麼你的解決方案是優越的。 – 2009-10-18 16:39:00

+0

我無法將您的建議應用於我的項目。肯定它可以工作,絕對我不能。 – Kerberos 2009-10-18 20:10:30

1

簡單的方法就是禁止任何刪除清空表

CREATE TRIGGER TRG_MyTable_D FOR DELETE 
AS 
IF NOT EXISTS (SELECT * FROM MyTable) 
    ROLLBACK TRAN 
GO 

更復雜,如果你做了什麼這多行刪除清空表?

DELETE FROM TABLE WHERE ID BETWEEN 2 AND 5 

所以,隨機你剛纔刪除

CREATE TRIGGER TRG_MyTable_D FOR DELETE 
AS 
IF NOT EXISTS (SELECT * FROM MyTable) 
    INSERT mytable (col2, col2, ..., coln) 
    SELECT TOP 1 col2, col2, ..., coln FROM INSERTED --ORDER BY ?? 

GO 

但要求是有點危險的,模糊的重新填充。在英語中,「在表格中至少有一行」,但在實踐中「哪一行?」

+0

也謝謝。但是你的建議水平對我的SQL知識水平來說很難:)也許我可以在將來使用你的建議。 – Kerberos 2009-10-18 19:50:27

相關問題