MySQL Forums
Forum List  »  French

PROBLEME LEFT OUTER JOIN
Posted by: Julien _
Date: November 28, 2008 10:21AM

Bonjour à tous,

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

-- 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 :

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.

Options: ReplyQuote


Subject
Views
Written By
Posted
PROBLEME LEFT OUTER JOIN
6779
November 28, 2008 10:21AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.