Salut,
j'ai une table Mysql :
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
 
CREATE TABLE IF NOT EXISTS `maTable` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `type` enum('type1','type2','type3','type4') collate utf8_bin NOT NULL,
  `idLangue` tinyint(3) unsigned NOT NULL default '1',
  `idReference` int(10) unsigned default NULL,
  PRIMARY KEY  (`id`),
  KEY `idLangue` (`idLangue`),
  KEY `idReference` (`idReference`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 
--
-- Contraintes pour la table `maTable`
--
ALTER TABLE `maTable`
  ADD CONSTRAINT `maTable_ibfk_5` FOREIGN KEY (`idReference`) 
       REFERENCES `maTable` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
je veux recupere toutes les enregistrements dont le type = "type1" et la langue = 2 (premier condition),
et toutes les enregistrements dont la langue != 2 + idReference est null et que leurs ids != idReference des enregistrements retourné par la 1er condition

j'ai essayé avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
SELECT * 
FROM `maTable`
WHERE (idLangue = 2 and type = "type1")
OR
(idLangue != 2 
 and idReference is NULL 
 and type = "type1"
 and id not in (select idReference from `maTable` where (idLangue = 2 and type = "type1"))
)
mais je prefere d'utilise la jointure (autojointure)
merci de m'aider