Bonjour,
Je rencontre un problème sur une de mes requêtes DELETE que je n'arrive pas à résoudre.
Voici ma requête :
L'objectif est de supprimer toutes mes entrées hormis la MAX(DATE).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 DELETE FROM NM.NM_SWITCH A WHERE A.host LIKE 'SW003' AND A.interface LIKE 'Fa4/0/39' AND A.date NOT IN (SELECT MAX(date) from NM.NM_SWITCH B WHERE B.host LIKE 'SW003' AND B.interface LIKE 'Fa4/0/39')
Je rencontre une erreur, et malheureusement, je ne comprend pas pourquoi.
Mariadb me retourne ce message :
Cette même requête en Select fonctionne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'A WHERE A.host LIKE 'SW003' AND A.interface LIKE 'Fa4/0/39' AND A.date NOT IN' at line 1
Voici la table :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 DELETE FROM NM.NM_SWITCH A WHERE A.host LIKE 'SW003' AND A.interface LIKE 'Fa4/0/39' AND A.date NOT IN (SELECT MAX(date) from NM.NM_SWITCH B WHERE B.host LIKE 'SW003' AND B.interface LIKE 'Fa4/0/39') [...] 9 rows in set (0.00 sec)
Pour information :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 MariaDB [NM]> describe NM_SWITCH; +---------------+--------------+------+-----+-----------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------+--------------+------+-----+-----------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | HOST | varchar(25) | NO | | NULL | | | IP | varchar(15) | NO | | NULL | | | PORT | int(3) | NO | | NULL | | | INTERFACE | varchar(25) | NO | | NULL | | | IFADMINSTATUS | varchar(5) | NO | | NULL | | | IFOPERSTATUS | varchar(5) | NO | | NULL | | | IFSPEED | varchar(5) | NO | | NULL | | | IFINERROR | int(11) | NO | | NULL | | | IFINERRORT1 | int(11) | NO | | 0 | | | IFOUTERROR | int(11) | NO | | NULL | | | IFOUTERRORT1 | int(11) | NO | | 0 | | | MACADDR | varchar(20) | NO | UNI | NULL | | | DATE | datetime | NO | | NULL | | | COMMENT | varchar(140) | NO | | NOCOMMENT | | +---------------+--------------+------+-----+-----------+----------------+
Cette requête fonctionne :
et celle-ci ne fonctionne pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 DELETE FROM NM.NM_SWITCH A WHERE A.host LIKE 'SW003' AND A.interface LIKE 'Fa4/0/39' AND A.date NOT IN (SELECT MAX(date) from NM.NM_SWITCH B)
L'erreur provient dès lors que j'ajoute une condition dans ma requête indentée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 DELETE FROM NM.NM_SWITCH A WHERE A.host LIKE 'SW003' AND A.interface LIKE 'Fa4/0/39' AND A.date NOT IN (SELECT MAX(date) from NM.NM_SWITCH B WHERE 1)
Je suis à court d'idée et de recherches Google.
C'est pourquoi je viens demander un coup de main.
Merci.
Partager