Bonjour,
(Je précise que j'ai parcouru en long et en large le forum Mysql et
l'excellent site sqlpro.developpez.com ainsi que celui de MySQL d'ailleurs., mais je suis toujours bloqué j'ai perdu une journée la dessus et je commence à craquer)
Je suis sous MySQL 4.0.18 ... typiquement j'aurai besoin d'une sous requete, je tente donc de la contourner comme je l'ai lu a plusieurs reprises.
Exemple :
Table Evenements
Numev
1
2
3
4
5
Table RDV
NumEv Nom
1 BBB
1 CCC
3 AAA
3 BBB
4 AAA
5 CCC
5 BBB
Je veux voir chaque Evenement sauf si AAA y participe, c'est à dire les numev 1, 2 et 5
Sous MySQL 4.1 je ferai donc
SELECT Numev
FROM Evenements
NOT IN (
SELECT NumEv FROM RDV WHERE Nom != "AAA")
Sous MySQL 4.0 j'ai lu qu'il fallait utiliser LEFT JOIN
SELECT NumEv
FROM Evenements
LEFT JOIN RDV
ON Evenements.Numev = RDV.Numev
WHERE RDV.Numev IS NULL
AND Nom != "AAA"
Je comprend pourquoi ca décone (il suffit d'enlever le AND pour comprendre). Le problème c'est que je ne vois pas comment contourner le problème.
Un distinct n'y changerai rien.
(Inutile de me dire de passer sous MySQL 4.1, je ne peux pas et en plus il n'est pas annoncé comme stable par MySQL AB)
Par avance des milliards de merci à celui qui me dépanne (et chapeau !)
EDIT : JE met le script de création des tables pour faciliter le travail des sauveteurs
#
# Table structure for table 'evenements'
#
CREATE TABLE evenements (
NumEv tinyint(3) unsigned NOT NULL default '0',
PRIMARY KEY (NumEv)
) TYPE=MyISAM;
#
# Dumping data for table 'evenements'
#
INSERT INTO evenements VALUES("1");
INSERT INTO evenements VALUES("2");
INSERT INTO evenements VALUES("3");
INSERT INTO evenements VALUES("4");
INSERT INTO evenements VALUES("5");
#
# Table structure for table 'rdv'
#
CREATE TABLE rdv (
Numev tinyint(3) unsigned NOT NULL default '0',
Nom char(3) NOT NULL default '0',
PRIMARY KEY (Numev,Nom)
) TYPE=MyISAM;
#
# Dumping data for table 'rdv'
#
INSERT INTO rdv VALUES("1", "BBB");
INSERT INTO rdv VALUES("1", "CCC");
INSERT INTO rdv VALUES("3", "AAA");
INSERT INTO rdv VALUES("3", "BBB");
INSERT INTO rdv VALUES("3", "CCC");
INSERT INTO rdv VALUES("4", "AAA");
INSERT INTO rdv VALUES("5", "BBB");
INSERT INTO rdv VALUES("5", "CCC");
Partager