0
非常に新しいストアドプロシージャであり、クエリの動作を確認する必要はありませんが、より良いコードは非常に高い評価を受けます。
私は2つのテーブルを持っています
1.Users ===>メインレコードテーブル
2.temp_Users ===>テーブルに最新の現在のユーザ情報が含まれています
私の必要なタスクは
です。表から表にユーザーではありません
B.Add新規ユーザーtemp_Usersあなたの削除クエリがあるべき
MySQLストアドプロシージャのヘルプが必要
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 ;
あなたはあなたの最初の 'SELECT'の両方を削除することができます'oldusers'と' newusers'への割り当てだけでなく、 'CASE'も削除します。 'DELETE'と' INSERT'文を実行するだけです。条件に一致する行がある場合はアクションが実行され、存在しない場合は行なわれません。 'COUNT'や変数は必要ありません。 –
@KenWhiteはいこれは私の最後の選択肢ですが、これでどのように動作するかを知る必要があります。 –
必要のないコードを書く方法を学びたいですか?私はそれが理にかなっていないのではないかと心配しています。あなたはより良いコードを求めました。そして、より良いコード(不要なものを取り除く)のために必要なものを教えました。 :) –