2014-09-29 61 views
0
SET @UserID_In = 1; 
Select * FROM EarnedTransaction AS ETMain WHERE ETMain.UserID = @UserID_In 
    AND ETMain.ID = (SELECT MAX(ID) FROM EarnedTransaction AS ETSub WHERE ETSub.UserID = 
    ETMain.UserID AND ETSub.TransactionType = 'Buying' AND ETSub.CompleteDate IS NULL) 
    AND ETMain.ID = (SELECT MAX(ID) FROM EarnedTransaction AS ETSub WHERE ETSub.UserID =    
    ETMain.UserID); 

返回34 15 Buying 1500 14281-09-29 10:09:55MySQL的SELECT語句的作品,但不會刪除

但:

SET @UserID_In = 1; 
Delete FROM EarnedTransaction AS ETMain WHERE ETMain.UserID = @UserID_In 
    AND ETMain.ID = (SELECT MAX(ID) FROM EarnedTransaction AS ETSub WHERE ETSub.UserID = 
     ETMain.UserID AND ETSub.TransactionType = 'Buying' AND ETSub.CompleteDate IS NULL) 
    AND ETMain.ID = (SELECT MAX(ID) FROM EarnedTransaction AS ETSub WHERE ETSub.UserID =     
     ETMain.UserID); 

返回: [Err] 1064 - You have an error in your SQL syntax;檢查對應於您的MySQL服務器版本附近AS ETMain WHERE ETMain.UserID = @UserID_In AND ETMain.ID = (SELECT MAX(ID)使用正確的語法手冊在第1行

+0

CREATE TABLE'EarnedTransaction'( 'ID' INT(11)NOT NULL AUTO_INCREMENT, 'Points'十進制(8,2)NOT NULL, 'TransactionType'文本COLLATE utf8_bin NOT NULL, 'Amount'十進制( 10,2)NOT NULL, 'LogNo'文本COLLATE utf8_bin NOT NULL, 'UserID' INT(11)NOT NULL, 'CreatedDate'時間戳NOT NULL DEFAULT CURRENT_TIMESTAMP, 'CompleteDate'日期時間DEFAULT NULL, PRIMARY KEY( 'ID') )ENGINE = MyISAM AUTO_INCREMENT = 41 DEFAULT CHARSET = utf8 COLLATE = utf8_bin; – 2014-09-29 09:22:12

+1

刪除不支持別名。 - > http://bugs.mysql.com/bug.php?id=12811 – 2014-09-29 09:22:30

回答

2

試試這個刪除查詢(沒有別名爲「刪除表」):

SET @UserID_In = 1; 
DELETE FROM EarnedTransaction 
     WHERE UserID = @UserID_In 
     AND ID = (SELECT MAX(ID) 
        FROM EarnedTransaction AS ETSub 
        WHERE ETSub.UserID = UserID 
        AND ETSub.TransactionType = 'Buying' 
        AND ETSub.CompleteDate IS NULL) 
     AND ID = (SELECT MAX(ID) 
        FROM EarnedTransaction AS ETSub 
        WHERE ETSub.UserID = UserID); 
1

我得到了以下簡化。在某個時候,你可能意味着不同的東西。

原件,格式:

SET @UserID_In = 1; 
DELETE FROM EarnedTransaction AS ETMain WHERE ETMain.UserID = @UserID_In 
AND ETMain.ID = (
    SELECT MAX(ID) 
    FROM EarnedTransaction AS ETSub 
    WHERE ETSub.UserID = ETMain.UserID 
    AND ETSub.TransactionType = 'Buying' 
    AND ETSub.CompleteDate IS NULL) 
AND ETMain.ID = (
    SELECT MAX(ID) 
    FROM EarnedTransaction AS ETSub 
    WHERE ETSub.UserID = ETMain.UserID); 

第一個子查詢和第二個子查詢降低第一。也許像OR-ELSE這樣的意思是?

SET @UserID_In = 1; 
DELETE FROM EarnedTransaction AS ETMain WHERE ETMain.UserID = @UserID_In 
AND ETMain.ID = (
    SELECT MAX(ID) 
    FROM EarnedTransaction AS ETSub 
    WHERE ETSub.UserID = @UserID_In 
    AND ETSub.TransactionType = 'Buying' 
    AND ETSub.CompleteDate IS NULL); 

現在不需要主別名(如果使用的@UserID_In)

SET @UserID_In = 1; 
DELETE FROM EarnedTransaction WHERE UserID = @UserID_In 
AND ID = (
    SELECT MAX(ID) 
    FROM EarnedTransaction AS ETSub 
    WHERE ETSub.UserID = @UserID_In 
    AND ETSub.TransactionType = 'Buying' 
    AND ETSub.CompleteDate IS NULL); 

然後所述子集別名,用戶ID上去除雙重條件:

SET @UserID_In = 1; 
DELETE FROM EarnedTransaction WHERE ID = (
    SELECT MAX(ID) 
    FROM EarnedTransaction 
    WHERE UserID = @UserID_In 
    AND TransactionType = 'Buying' 
    AND CompleteDate IS NULL); 

這裏子查詢很容易檢查。