Empêcher les lignes retournées en doubles

abdeslam1999 Messages postés 36 Statut Membre -  
 abdeslam1999 -
Bonjour,

j'ai tenté de sélectionner plusieurs champs dans plusieurs tables(jointures) mais le problème que j'ai rencontré les lignes retournées sont doublées.

j'ai utilisé la fonction distinct mais toujours le meme problème voilà la requête et les tables (elles sont en jointures) vous pouvez faire copier et coler les tables dans un editeurs puis executer la requête pour les choses être en calire:

la requete

select consultation_frs.consult_frs_id as consult_frs_id,consult_frs_art.article_id,
fournisseur.fournisseur_id,consultation_frs.consult_ach_id
,article.code_article as code_article,consult_frs_art.qte_consult as qte_consult ,nom_fournisseur,ref_consult,date_consult_frs,etat_consult_frs,mode_consult_frs from article,consult_frs_art,consultation_frs,fournisseur,consultation_achat where fournisseur.fournisseur_id=consultation_frs.fournisseur_id and consultation_achat.consult_ach_id=consult_frs_art.consult_ach_id and article.article_id=consult_frs_art.article_id and consultation_achat.consult_ach_id=consultation_frs.consult_ach_id

les tables:vous pouvez faire copier et coler tout ce code
-- ---------------------------------------------------------------------------------------------------------

--
-- Structure de la table `article`
--

CREATE TABLE `article` (
`article_id` int(10) NOT NULL auto_increment,
`sous_famille_id` int(10) NOT NULL,
`code_unite` int(10) default NULL,
`code_tva` int(10) default NULL,
`code_article` varchar(10) default NULL,
`designation` varchar(150) default NULL,
`observation` varchar(200) default NULL,
`prix_unitaire` decimal(15,2) default NULL,
PRIMARY KEY (`article_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=25 ;

--
-- Contenu de la table `article`
--

INSERT INTO `article` (`article_id`, `sous_famille_id`, `code_unite`, `code_tva`, `code_article`, `designation`, `observation`, `prix_unitaire`) VALUES
(1, 4, 0, 0, 'A01042', 'SALLE DE TRAITE MODEL KORU SANS MESURE_LAIT, 5 VACHES', 'teste', 150.00),
(2, 4, 0, 0, 'A01041', 'SALLE DE TRAITE MODEL KORU SANS MESURE_LAIT, 4 VACHES', 'AA', 250.00),
(4, 4, 0, 0, 'A01002', 'CHARIOT TRAYEUR BS MINI BEREKET', '', 340.00),
(5, 4, 0, 0, 'A01001', 'CHARIOT TRAYEUR BS MINI X BEREKET', '', 147.00),
(6, 4, 0, 0, 'A01004', 'CHARIOT TRAYEUR BS1 BEREKET', '', 430.00),
(7, 4, 0, 0, 'A01003', 'CHARIOT TRAYEUR BS1 X BEREKET', '', 543.00),
(8, 4, 0, 0, 'A01006', 'CHARIOT TRAYEUR BS3/1 BEREKET', '', 123.00),
(9, 4, 0, 0, 'A01005', 'CHARIOT TRAYEUR BS3/1X BEREKET', '', 65.00),
(10, 4, 0, 0, 'A01008', 'CHARIOT TRAYEUR BS3/2 BEREKET', '', 32.00),
(11, 7, 0, 0, 'B01003', 'AGNOTONIC (25 Kg)', '', 98.00),
(12, 7, 0, 0, 'B01006', 'CREMO ELEVAGE (10 Kg)', '', 98.00),
(13, 7, 0, 0, 'B01005', 'CREMO ELEVAGE (25 Kg)', '', 98.00),
(14, 7, 0, 0, 'B01004', 'VODOR ONE (25 Kg)', '', 98.00),
(15, 7, 0, 0, 'B01002', 'VODOR TA (10 Kg)', '', 98.00),
(16, 7, 0, 0, 'B01001', 'VODOR TA (25 Kg)', '', 563.00);

-- --------------------------------------------------------

--
-- Structure de la table `consultation_achat`
--

CREATE TABLE `consultation_achat` (
`consult_ach_id` int(10) NOT NULL auto_increment,
`ref_consult_ach` varchar(10) default NULL,
`date_consult_ach` date default NULL,
`etat_consult_ach` varchar(20) default NULL,
`date_etat` date default NULL,
PRIMARY KEY (`consult_ach_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=26 ;

--
-- Contenu de la table `consultation_achat`
--

INSERT INTO `consultation_achat` (`consult_ach_id`, `ref_consult_ach`, `date_consult_ach`, `etat_consult_ach`, `date_etat`) VALUES
(25, 'CA001', '2009-12-12', 'Creee', '2009-12-12');

-- --------------------------------------------------------

--
-- Structure de la table `consultation_frs`
--

CREATE TABLE `consultation_frs` (
`consult_ach_id` int(10) NOT NULL,
`fournisseur_id` int(10) NOT NULL,
`consult_frs_id` int(10) NOT NULL,
`ref_consult` varchar(15) default NULL,
`date_consult_frs` date default NULL,
`etat_consult_frs` varchar(100) default NULL,
`mode_consult_frs` varchar(50) default NULL,
`reponse_frs` varchar(50) default NULL,
`date_reponse` date default NULL,
PRIMARY KEY (`consult_ach_id`,`fournisseur_id`,`consult_frs_id`),
KEY `Consultation_Achat_FK2` (`consult_ach_id`),
KEY `Fournisseur_FK` (`fournisseur_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Contenu de la table `consultation_frs`
--

INSERT INTO `consultation_frs` (`consult_ach_id`, `fournisseur_id`, `consult_frs_id`, `ref_consult`, `date_consult_frs`, `etat_consult_frs`, `mode_consult_frs`, `reponse_frs`, `date_reponse`) VALUES
(25, 4, 1, 'RF001', '2009-12-13', 'Creee', 'Telephone', NULL, NULL),
(25, 4, 2, 'RF001', '2009-12-13', 'Creee', 'Telephone', NULL, NULL),
(25, 4, 3, 'RF001', '2009-12-13', 'Creee', 'Telephone', NULL, NULL);

-- --------------------------------------------------------

--
-- Structure de la table `consult_frs_art`
--

CREATE TABLE `consult_frs_art` (
`consult_ach_id` int(10) NOT NULL,
`article_id` int(10) NOT NULL,
`qte_consult` decimal(5,2) default NULL,
PRIMARY KEY (`consult_ach_id`,`article_id`),
KEY `Consultation_Achat_FK` (`consult_ach_id`),
KEY `Article_FK2` (`article_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Contenu de la table `consult_frs_art`
--

INSERT INTO `consult_frs_art` (`consult_ach_id`, `article_id`, `qte_consult`) VALUES
(25, 7, 23.00),
(25, 10, 12.00),
(25, 13, 10.00);

-- --------------------------------------------------------

--
-- Structure de la table `fournisseur`
--

CREATE TABLE `fournisseur` (
`fournisseur_id` int(10) NOT NULL auto_increment,
`nom_fournisseur` varchar(50) NOT NULL,
`activite` varchar(100) default NULL,
`raison_sociale` varchar(50) default NULL,
`categorie` varchar(30) default NULL,
`adresse` varchar(30) default NULL,
`code_postal` varchar(20) default NULL,
`ville` varchar(30) default NULL,
`pays` varchar(20) default NULL,
`contact` varchar(20) default NULL,
`interlocuteur` varchar(20) default NULL,
`telephone` varchar(10) default NULL,
`mobile` varchar(10) default NULL,
`email` varchar(30) default NULL,
`web` varchar(20) default NULL,
`mode_paiement_prefere` varchar(20) default NULL,
PRIMARY KEY (`fournisseur_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;

--
-- Contenu de la table `fournisseur`
--

INSERT INTO `fournisseur` (`fournisseur_id`, `nom_fournisseur`, `activite`, `raison_sociale`, `categorie`, `adresse`, `code_postal`, `ville`, `pays`, `contact`, `interlocuteur`, `telephone`, `mobile`, `email`, `web`, `mode_paiement_prefere`) VALUES
(1, '3S', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '05 22 99 2', NULL, NULL, NULL, NULL),
(2, 'AGRIDEV', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(3, 'AGSOL', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(4, 'AMAZON VERTE', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(5, 'BELGOMA', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(6, 'BRENNTAG', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7, 'BRIOR', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(8, 'CADILHAK', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(9, 'CAPFI', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '00 22 40 7', NULL, NULL, NULL, NULL),
(10, 'CASA-MEDICAL', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(11, 'CASAPERLA', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(12, 'CLINICA', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);

c'est urgant je veux savoir est ce qu'il ya une autre fonction spéciale sans distint qui êmpeche les lignes doublées car je trouve ça bizzar!!!

merci
Configuration: Windows XP Internet Explorer 6.0
sql wamp
A voir également:

1 réponse

Jean_Jacques Messages postés 1045 Date d'inscription   Statut Membre Dernière intervention   112
 
Bonjour abdeslam1999,

GROUP By permet d'éviter les doublons.

Le lien de référence : http://sql.1keydata.com/fr/sql-group-by.php

Un exemple d'utilisation provenant de ce lien :

SELECT store_name, SUM(Sales)
FROM Store_Information
GROUP BY store_name

Cordialement
0
abdeslam1999
 
mais cette fonction sert dans l'agrégation (max(),min(),agv()....etc) et j'ai déjà utilisé Group by oui vraiement les lignes retournées ne sont pas doublées mais un autre problème qui généré certain colonne retourne même champ (dans le cas de ma requête c'est code article A0103,A0103,A0103).

si vous voulez faire un teste sur cette requête et tu voie la résultat:


sans groupe by

select consultation_frs.consult_frs_id,consult_frs_art.article_id,
fournisseur.fournisseur_id,consultation_frs.consult_ach_id
,article.code_article as code_article,consult_frs_art.qte_consult as qte_consult ,nom_fournisseur,ref_consult,date_consult_frs,etat_consult_frs,mode_consult_frs from article,consult_frs_art,consultation_frs,fournisseur,consultation_achat where fournisseur.fournisseur_id=consultation_frs.fournisseur_id and consultation_achat.consult_ach_id=consult_frs_art.consult_ach_id and article.article_id=consult_frs_art.article_id and consultation_achat.consult_ach_id=consultation_frs.consult_ach_id





avec groupe by

select consultation_frs.consult_frs_id,consult_frs_art.article_id,
fournisseur.fournisseur_id,consultation_frs.consult_ach_id
,article.code_article as code_article,consult_frs_art.qte_consult as qte_consult ,nom_fournisseur,ref_consult,date_consult_frs,etat_consult_frs,mode_consult_frs from article,consult_frs_art,consultation_frs,fournisseur,consultation_achat where fournisseur.fournisseur_id=consultation_frs.fournisseur_id and consultation_achat.consult_ach_id=consult_frs_art.consult_ach_id and article.article_id=consult_frs_art.article_id and consultation_achat.consult_ach_id=consultation_frs.consult_ach_id

group by consultation_frs.consult_frs_id
0