T'as regardé sous le canapé ?Je n'arrive pas à trouver cette requête.
Rappel pratique - n'oubliez pas de :Attention, suivre ces consignes est obligatoire. Merci de les lire attentivement.
- suivre ces quelques conseils de débogage
- préciser quel SGBD vous utilisez ainsi que sa version
- utiliser les balises
[/i] pour afficher vos requêtes SQLCode : Tout sélectionner
[/i] et [i]- poster le schéma des tables pertinentes à votre requête sous la forme d'une instruction "CREATE TABLE" (fonction "Exporter" de phpMyAdmin)
- si nécessaire, poster un échantillon des données
Ben pour une fois que je pose une question sur un forum ...T'as regardé sous le canapé ?
je n'ai pas de code, donc rien à déboguer.1. suivre ces quelques conseils de débogage
comme précisé dans le premier post il s'agit de 2 tables MySQL2. préciser quel SGBD vous utilisez ainsi que sa version
je n'avais pas de code à afficher.3. utiliser les balises et pour afficher vos requêtes SQL
comme précisé dans le premier post ces 2 tables MySQL ont la même structure et ont un seul champ nommé "valeur" ( c'est pour simplifier, en fait elles en ont plusieurs )4. poster le schéma des tables pertinentes à votre requête sous la forme d'une instruction
ok,5. si nécessaire, poster un échantillon des données
Code : Tout sélectionner
SELECT valeur.table1, valeur.table2 FROM table1, table2 WHERE valeur.table1 <> valeur.table2
Alors je pense que nous ne lisons pas la même chose, puisque dans la phrase, si je ne me trompe, l'on demande le "SGDB ainsi que sa version"comme précisé dans le premier post il s'agit de 2 tables MySQL2. préciser quel SGBD vous utilisez ainsi que sa version
Alors permet moi de te dire que tu as là une très très très mauvaise modélisation. Une base de données, ce n'est pas un fichier texte, ce qui signifie que tu ne parcoures pas les données d'un champ aussi facilement que dans un fichier texte, et qu'au contraire, si tu utilises bien ta base du peux faire 100 fois plus de choses.comme précisé dans le premier post ces 2 tables MySQL ont la même structure et ont un seul champ nommé "valeur" ( c'est pour simplifier, en fait elles en ont plusieurs )4. poster le schéma des tables pertinentes à votre requête sous la forme d'une instruction
CREATE TABLE `table1` (
`valeur` TEXT NOT NULL
);
CREATE TABLE `table2` (
`valeur` TEXT NOT NULL
);
ok,5. si nécessaire, poster un échantillon des données
dans "table1" , on trouve dans le champ "valeur" : a,b,c,d
dans "table2" , on trouve dans le champ "valeur" : a,c
Je fais des tests sur une vieille version : 4.1.9Alors je pense que nous ne lisons pas la même chose, puisque dans la phrase, si je ne me trompe, l'on demande le "SGDB ainsi que sa version"
Tu peux trouver superflu de donner la version, mais on ne fait pas la même chose avec un MySQL 4.0 et un MySQL 4.1 … :-/
c'est exactement ce que j'ai.alors que si tu avais ms a dans un enregistrement, b dans un autre, c dans un autre encore, et enfin d dans un dernier, tu pouvais faire des opérations dessus via des requètes SQL
Code : Tout sélectionner
SELECT valeur FROM table1 WHERE valeur NOT IN(SELECT valeur FROM table2);
Code : Tout sélectionner
mysql> CREATE TABLE test1(valeur VARCHAR(255) NOT NULL PRIMARY KEY);
Query OK, 0 rows affected (0.09 sec)
mysql> CREATE TABLE test2(valeur VARCHAR(255) NOT NULL PRIMARY KEY);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO test1 VALUES("a"),("b"),("c"),("d");
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> INSERT INTO test2 VALUES("a"),("c");
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT valeur FROM test1 WHERE valeur NOT IN(SELECT valeur FROM test2);
+--------+
| valeur |
+--------+
| b |
| d |
+--------+
2 rows in set (0.00 sec)Code : Tout sélectionner
SELECT valeur FROM table1 WHERE valeur NOT IN(SELECT valeur FROM table2);
Code : Tout sélectionner
SELECT t1.valeur
FROM test1 t1
LEFT JOIN test2 t2 USING (valeur)
WHERE t2.valeur IS NULL
Ok, je ne connaissais pas cette subtilité…En fait, même sous 6.0 je ne suis pas certain que l'optimiseur ait été mis à jour. Dans l'état actuel des choses, MySQL considère ces requêtes comme des DEPENDENT SUBQUERY et par conséquent exécute une requête sur la table "intérieure" pour chacune des lignes de table "extérieure".