PROBLEME LEFT OUTER JOIN
Posted by: Julien _
Date: November 28, 2008 10:21AM
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 :
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 :
Je dois dire que je n'y comprend plus rien.
Help!
D'avance merci.
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.
Subject
Views
Written By
Posted
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.