Bonjour,

Je rencontre un problème sur une de mes requêtes DELETE que je n'arrive pas à résoudre.

Voici ma requête :

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')
L'objectif est de supprimer toutes mes entrées hormis la MAX(DATE).

Je rencontre une erreur, et malheureusement, je ne comprend pas pourquoi.

Mariadb me retourne ce message :

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
Cette même requête en Select fonctionne :

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)
Voici la table :

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 |                |
+---------------+--------------+------+-----+-----------+----------------+
Pour information :

Cette requête fonctionne :

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)
et celle-ci ne fonctionne pas :

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)
L'erreur provient dès lors que j'ajoute une condition dans ma requête indentée.

Je suis à court d'idée et de recherches Google .

C'est pourquoi je viens demander un coup de main.

Merci.