2012-03-25 15 views
0

Iam sehr neu in gespeicherten Prozedur, keine Abfrage Abfrage funktioniert, aber jeder bessere Code wird sehr spürbar.
Ich habe zwei Tabellen
1.Users ===> Die wichtigsten Datensätze Tabelle
2.temp_Users ===> Tabelle enthalten aktualisierte aktuelle Benutzer Informationen

Meine erforderliche Aufgabe ist
A.Check Benutzer, die gelöscht werden müssen.
B.Add neue Benutzer, die nicht in der Tabelle sind Benutzer aus Tabelle temp_Users

Benötigen Sie Hilfe in MySQL gespeicherte Prozedur

DELIMITER // 
    CREATE PROCEDURE checkUsers() 
     BEGIN 
     DECLARE oldusers, newusers INT DEFAULT 0 

//To catch delete users  
     SELECT COUNT(Users.Ext) INTO oldusers 
     FROM Users 
     LEFT JOIN temp_Users 
     ON temp_Users.Ext=Users.Ext 
     WHERE temp_Users.Ext IS NULL; 

//To catch new users  
     SELECT COUNT(temp_Users.Ext) INTO newusers 
     FROM Users 
     RIGHT JOIN temp_Users 
     ON temp_Users.Ext=Users.Ext 
     WHERE Users.Ext IS NULL; 

     CASE 
     WHEN oldusers>0 
     THEN DELETE FROM Users SELECT Users.Ext 
       FROM Users 
       LEFT JOIN temp_Users 
       ON temp_Users.Ext=Users.Ext 
       WHERE temp_Users.Ext IS NULL; 

     WHEN newusers>0 
     THEN INSERT INTO Users (Ext) SELECT temp_Users.Ext 
       FROM Users 
       RIGHT JOIN temp_Users 
       ON temp_Users.Ext=Users.Ext 
       WHERE Users.Ext IS NULL; 
     ELSE exit; 
     END CASE; 


     END // 
    DELIMITER ; 
+2

Sie können Ihre beiden ursprünglichen 'SELECT' entfernen Statements, sowie die Zuordnung zu "Oldusers" und "Newusers", und entfernen Sie auch die "CASE". Führen Sie einfach Ihre 'DELETE' und' INSERT' Anweisungen aus; Wenn es Zeilen gibt, die den Kriterien entsprechen, wird die Aktion ausgeführt, und wenn keine vorhanden ist, wird sie nicht ausgeführt. Sie brauchen nicht die 'COUNT' oder Variablen. –

+0

@KenWhite Ja, das ist meine letzte Option, aber ich muss lernen, wie es damit funktioniert. –

+1

Sie möchten lernen, wie Sie Code schreiben, den Sie nicht brauchen? Ich fürchte, das macht keinen Sinn - Sie haben nach besserem Code gefragt, und ich habe Ihnen gesagt, was Sie für besseren Code brauchen (entfernen Sie unnötige Dinge). :) –

Antwort

0

Ihre Lösch-Abfrage sollte -

DELETE Users 
FROM Users 
LEFT JOIN temp_Users 
    ON temp_Users.Ext=Users.Ext 
WHERE temp_Users.Ext IS NULL; 
Verwandte Themen