Bonjour à tous,

J'ai un problème de requête un peu complexe sur plusieurs tables.
Je m'explique :
J'ai les tables suivantes :

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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
 
-- Structure de la table `contacts`
-- 
 
CREATE TABLE `contacts` (
  `id` int(11) NOT NULL auto_increment,
  `type` int(11) default NULL,
  `demarche` int(11) default NULL,
  `societe` int(11) NOT NULL default '0',
  `provenance` int(11) NOT NULL default '0',
  `civilite` longtext,
  `nom` longtext,
  `prenom` longtext,
  `adresse` longtext,
  `cp` longtext,
  `ville` longtext,
  `tel` longtext,
  `mobile` longtext,
  `fax` longtext,
  `mail` longtext,
  `budget_max` longtext,
  `zone_geo` int(11) default NULL,
  `observation` longtext,
  `date` date default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=318 ;
 
-- --------------------------------------------------------
 
-- 
-- Structure de la table `lots`
-- 
 
CREATE TABLE `lots` (
  `id` int(11) NOT NULL auto_increment,
  `id_prog` int(11) default NULL,
  `numero` tinyint(4) default NULL,
  `surface_nue` int(11) default NULL,
  `surface_batie` int(11) default NULL,
  `shon` int(11) default NULL,
  `prix` int(11) default NULL,
  `etat` varchar(50) default 'Libre',
  `surface_nc` int(11) default NULL,
  PRIMARY KEY  (`id`),
  KEY `id_prog` (`id_prog`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=139 ;
 
-- --------------------------------------------------------
 
-- 
-- Structure de la table `programme`
-- 
 
CREATE TABLE `programme` (
  `id` int(11) NOT NULL auto_increment,
  `nom_programme` varchar(50) default NULL,
  `dpt` varchar(50) default NULL,
  `ville` varchar(50) default NULL,
  `date_livraison` date default NULL,
  `eau` tinyint(1) default NULL,
  `egout` tinyint(1) NOT NULL default '0',
  `edf` tinyint(1) default NULL,
  `gaz` tinyint(1) default NULL,
  `brl` tinyint(1) default NULL,
  `telecom` tinyint(1) default NULL,
  `tre` tinyint(1) default NULL,
  `tre_montant` int(11) default NULL,
  `tle` tinyint(1) default NULL,
  `tdcaue` tinyint(1) default NULL,
  `tdens` tinyint(1) default NULL,
  `archi_coord` int(11) default NULL,
  `geometre` int(11) default NULL,
  `lien` varchar(150) default NULL,
  `caution` int(11) default NULL,
  `contact` longtext,
  `mentions_legales` longtext,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;
 
-- --------------------------------------------------------
 
-- 
-- Structure de la table `provenance`
-- 
 
CREATE TABLE `provenance` (
  `id` int(11) NOT NULL auto_increment,
  `nom_provenance` varchar(50) NOT NULL default 'NA',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=24 ;
 
-- --------------------------------------------------------
 
-- 
-- Structure de la table `ventes`
-- 
 
CREATE TABLE `ventes` (
  `id` int(11) NOT NULL auto_increment,
  `id_contact` int(11) default NULL,
  `id_lot` int(11) default NULL,
  `type_vente` longtext,
  `id_precripteur` int(11) NOT NULL default '0',
  `financement` varchar(50) default NULL,
  `id_banque` int(11) default NULL,
  `accord_pret` varchar(50) default NULL,
  `date_credit` date default NULL,
  `date_compromis` date default NULL,
  `date_acte` date default NULL,
  `cheque_encaisse` varchar(50) default NULL,
  `notification` date default NULL,
  `notification_notaire` date default NULL,
  `retour_ar` date default NULL,
  `retour_ar_notaire` date default NULL,
  `autre_notification` date default NULL,
  `detail_autre_notification` longtext,
  `montant_cheque` int(11) default NULL,
  `date_cheque_resa` date default NULL,
  `numero_cheque_resa` varchar(50) default NULL,
  `prix_vente` int(11) default NULL,
  `observations` longtext,
  `echeance_vente` date default NULL,
  `montant_comission` double default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=52 ;
Je cherche à faire un requête qui me retourne tous les LOTS d'un PROGRAMME voulu, qu'il soit référencé dans la table VENTE ou pas, en y attachant également des infos prises dans les table CONTACTS et PROVENANCE.

J'ai utilisé LEFT OUTER JOIN : cela ne fonctionne que si je selectionne uniquement les tables LOTS, VENTES, et PROGRAMME. Si j'ajoute les tables CONTACTS et PROVENANCES, je n'obtient que les LOTS référencés dans la table VENTE.

Voici ma requête :

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
21
22
23
24
25
26
27
 
SELECT
lots.numero AS Numero,
lots.prix AS 'Prix grille',
ventes.prix_vente AS 'Prix de reservation',
CONCAT_WS( ' - ', contacts.nom, contacts.prenom ) AS Acquereur,
provenance.nom_provenance AS 'Origine du contact',
ventes.date_compromis AS 'Date promesse',
ventes.echeance_vente AS 'Echeance promesse',
ventes.date_acte AS 'Date acte',
ventes.montant_comission AS 'Commission (HT)',
CONCAT_WS( ' ', contacts_1.nom, contacts_1.prenom ) AS Vendeur
 
FROM
programme,
lots LEFT OUTER JOIN ventes ON lots.id=ventes.id_lot,
contacts,
contacts AS contacts_1,
provenance
 
WHERE
programme.id = lots.id_prog
AND contacts.id = ventes.id_contact
AND contacts_1.id = ventes.id_precripteur
AND provenance.id = contacts.provenance
AND programme.nom_programme = 'LES LAURIERS'
ORDER BY Numero ASC
Je dois dire que je n'y comprend plus rien.

Help!

D'avance merci.