Voilà, j'ai une table Parent et 4 tables Enfants (Enfant1, ...etc)
Toutes les tables enfants sont reliées à la table parent avec un
identifiant IdParent.
Je voudrais avoir pour chaque enregistrement Parent :
- Le contenu de l'enregistrement parent
- 4 booléens qui indiquent si oui ou non il existe au moins un
enregistrement dans une table enfant.
Du style :
IdParent | RubParent1 | RubParentN | ExisteEnfant1 | ExisteEnfantN
4 BLABLA TITI Oui Non
21245 TOTO BIBI Oui Oui
L'idéal, ca serait le tout en une requête SQL...
Le best ca serait une requête SQL normalisé indépendante de la base de
données, car cette requête risque d'être executée dans différents type
de base de données...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Christian Robert
Bonjour,
Par exemple
SELECT *, EXISTS(SELECT * FROM TableEnfant1 WHERE TableParent.IdParent = TableEnfant1.IdParent ) AS ExisteEnfant1 , EXISTS(SELECT * FROM TableEnfant2 WHERE TableParent.IdParent = TableEnfant2.IdParent ) AS ExisteEnfant2, ... FROM TableParent
Il y a d'autres manière possible, mais c'est la première qui m'est venue à l'esprit.
-- Cordialement, Christian Robert http://blogs.developpeur.org/christian/ MCT - Database Development / Database Administration
"Gilles TOURREAU" a écrit :
Bonjour tout le monde !
Voilà, j'ai une table Parent et 4 tables Enfants (Enfant1, ...etc) Toutes les tables enfants sont reliées à la table parent avec un identifiant IdParent.
Je voudrais avoir pour chaque enregistrement Parent :
- Le contenu de l'enregistrement parent - 4 booléens qui indiquent si oui ou non il existe au moins un enregistrement dans une table enfant.
Du style :
IdParent | RubParent1 | RubParentN | ExisteEnfant1 | ExisteEnfantN 4 BLABLA TITI Oui Non 21245 TOTO BIBI Oui Oui
L'idéal, ca serait le tout en une requête SQL... Le best ca serait une requête SQL normalisé indépendante de la base de données, car cette requête risque d'être executée dans différents type de base de données...
En vous remerciant par avance de vos lumières...
-- Gilles TOURREAU Responsable informatique
Société P.O.S Spécialiste en motoculture depuis + de 30 ans ! http://www.pos.fr
Bonjour,
Par exemple
SELECT *,
EXISTS(SELECT *
FROM TableEnfant1
WHERE TableParent.IdParent = TableEnfant1.IdParent ) AS
ExisteEnfant1 ,
EXISTS(SELECT *
FROM TableEnfant2
WHERE TableParent.IdParent = TableEnfant2.IdParent ) AS
ExisteEnfant2,
...
FROM TableParent
Il y a d'autres manière possible, mais c'est la première qui m'est venue à
l'esprit.
--
Cordialement,
Christian Robert http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
"Gilles TOURREAU" a écrit :
Bonjour tout le monde !
Voilà, j'ai une table Parent et 4 tables Enfants (Enfant1, ...etc)
Toutes les tables enfants sont reliées à la table parent avec un
identifiant IdParent.
Je voudrais avoir pour chaque enregistrement Parent :
- Le contenu de l'enregistrement parent
- 4 booléens qui indiquent si oui ou non il existe au moins un
enregistrement dans une table enfant.
Du style :
IdParent | RubParent1 | RubParentN | ExisteEnfant1 | ExisteEnfantN
4 BLABLA TITI Oui Non
21245 TOTO BIBI Oui Oui
L'idéal, ca serait le tout en une requête SQL...
Le best ca serait une requête SQL normalisé indépendante de la base de
données, car cette requête risque d'être executée dans différents type
de base de données...
SELECT *, EXISTS(SELECT * FROM TableEnfant1 WHERE TableParent.IdParent = TableEnfant1.IdParent ) AS ExisteEnfant1 , EXISTS(SELECT * FROM TableEnfant2 WHERE TableParent.IdParent = TableEnfant2.IdParent ) AS ExisteEnfant2, ... FROM TableParent
Il y a d'autres manière possible, mais c'est la première qui m'est venue à l'esprit.
-- Cordialement, Christian Robert http://blogs.developpeur.org/christian/ MCT - Database Development / Database Administration
"Gilles TOURREAU" a écrit :
Bonjour tout le monde !
Voilà, j'ai une table Parent et 4 tables Enfants (Enfant1, ...etc) Toutes les tables enfants sont reliées à la table parent avec un identifiant IdParent.
Je voudrais avoir pour chaque enregistrement Parent :
- Le contenu de l'enregistrement parent - 4 booléens qui indiquent si oui ou non il existe au moins un enregistrement dans une table enfant.
Du style :
IdParent | RubParent1 | RubParentN | ExisteEnfant1 | ExisteEnfantN 4 BLABLA TITI Oui Non 21245 TOTO BIBI Oui Oui
L'idéal, ca serait le tout en une requête SQL... Le best ca serait une requête SQL normalisé indépendante de la base de données, car cette requête risque d'être executée dans différents type de base de données...
En vous remerciant par avance de vos lumières...
-- Gilles TOURREAU Responsable informatique
Société P.O.S Spécialiste en motoculture depuis + de 30 ans ! http://www.pos.fr
SQLpro
La solution :
Exemple :
CREATE TABLE T_VEHICULE_VHC (VHC_ID INT NOT NULL PRIMARY KEY IDENTITY, VHC_NOM VARCHAR(32))
INSERT INTO T_VEHICULE_VHC VALUES ('AIRBUS A320') INSERT INTO T_VEHICULE_VHC VALUES ('LA CAPLYPSO') INSERT INTO T_VEHICULE_VHC VALUES ('VOLVO D2800') INSERT INTO T_VEHICULE_VHC VALUES ('BOEING 747B') INSERT INTO T_VEHICULE_VHC VALUES ('LE TITANICK') INSERT INTO T_VEHICULE_VHC VALUES ('DODGE VF512')
CREATE TABLE T_AVION_AVN (VHC_ID INT NOT NULL PRIMARY KEY, AVN_CAPACITE INT, AVN_RAYON_ACTION INT)
INSERT INTO T_AVION_AVN VALUES (1, 120, 2400) INSERT INTO T_AVION_AVN VALUES (4, 300, 7200)
CREATE TABLE T_BATEAU_BTO (VHC_ID INT NOT NULL PRIMARY KEY, BTO_TIRANT_EAU INT)
INSERT INTO T_BATEAU_BTO VALUES (2, 60) INSERT INTO T_BATEAU_BTO VALUES (5, 2541)
CREATE TABLE T_CAMION_CMN (VHC_ID INT NOT NULL PRIMARY KEY, CMN_TONNAGE INT)
INSERT INTO T_CAMION_CMN VALUES (3, 38) INSERT INTO T_CAMION_CMN VALUES (6, 22)
SELECT VHC.*, CASE WHEN AVN.VHC_ID IS NULL THEN 'NON' ELSE 'OUI' END AS AVION, CASE WHEN BTO.VHC_ID IS NULL THEN 'NON' ELSE 'OUI' END AS BATEAU, CASE WHEN CMN.VHC_ID IS NULL THEN 'NON' ELSE 'OUI' END AS CAMION FROM T_VEHICULE_VHC AS VHC LEFT OUTER JOIN T_AVION_AVN AS AVN ON VHC.VHC_ID = AVN.VHC_ID LEFT OUTER JOIN T_BATEAU_BTO AS BTO ON VHC.VHC_ID = BTO.VHC_ID LEFT OUTER JOIN T_CAMION_CMN AS CMN ON VHC.VHC_ID = CMN.VHC_ID
VHC_ID VHC_NOM AVION BATEAU CAMION ----------- -------------------------------- ----- ------ ------ 1 AIRBUS A320 OUI NON NON 2 LA CAPLYPSO NON OUI NON 3 VOLVO D2800 NON NON OUI 4 BOEING 747B OUI NON NON 5 LE TITANICK NON OUI NON 6 DODGE VF512 NON NON OUI
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
"Gilles TOURREAU" a écrit :
Bonjour tout le monde !
Voilà, j'ai une table Parent et 4 tables Enfants (Enfant1, ...etc) Toutes les tables enfants sont reliées à la table parent avec un identifiant IdParent.
Je voudrais avoir pour chaque enregistrement Parent :
- Le contenu de l'enregistrement parent - 4 booléens qui indiquent si oui ou non il existe au moins un enregistrement dans une table enfant.
Du style :
IdParent | RubParent1 | RubParentN | ExisteEnfant1 | ExisteEnfantN 4 BLABLA TITI Oui Non 21245 TOTO BIBI Oui Oui
L'idéal, ca serait le tout en une requête SQL... Le best ca serait une requête SQL normalisé indépendante de la base de données, car cette requête risque d'être executée dans différents type de base de données...
En vous remerciant par avance de vos lumières...
-- Gilles TOURREAU Responsable informatique
Société P.O.S Spécialiste en motoculture depuis + de 30 ans ! http://www.pos.fr
La solution :
Exemple :
CREATE TABLE T_VEHICULE_VHC
(VHC_ID INT NOT NULL PRIMARY KEY IDENTITY,
VHC_NOM VARCHAR(32))
INSERT INTO T_VEHICULE_VHC VALUES ('AIRBUS A320')
INSERT INTO T_VEHICULE_VHC VALUES ('LA CAPLYPSO')
INSERT INTO T_VEHICULE_VHC VALUES ('VOLVO D2800')
INSERT INTO T_VEHICULE_VHC VALUES ('BOEING 747B')
INSERT INTO T_VEHICULE_VHC VALUES ('LE TITANICK')
INSERT INTO T_VEHICULE_VHC VALUES ('DODGE VF512')
CREATE TABLE T_AVION_AVN
(VHC_ID INT NOT NULL PRIMARY KEY,
AVN_CAPACITE INT,
AVN_RAYON_ACTION INT)
INSERT INTO T_AVION_AVN VALUES (1, 120, 2400)
INSERT INTO T_AVION_AVN VALUES (4, 300, 7200)
CREATE TABLE T_BATEAU_BTO
(VHC_ID INT NOT NULL PRIMARY KEY,
BTO_TIRANT_EAU INT)
INSERT INTO T_BATEAU_BTO VALUES (2, 60)
INSERT INTO T_BATEAU_BTO VALUES (5, 2541)
CREATE TABLE T_CAMION_CMN
(VHC_ID INT NOT NULL PRIMARY KEY,
CMN_TONNAGE INT)
INSERT INTO T_CAMION_CMN VALUES (3, 38)
INSERT INTO T_CAMION_CMN VALUES (6, 22)
SELECT VHC.*,
CASE
WHEN AVN.VHC_ID IS NULL THEN 'NON'
ELSE 'OUI'
END AS AVION,
CASE
WHEN BTO.VHC_ID IS NULL THEN 'NON'
ELSE 'OUI'
END AS BATEAU,
CASE
WHEN CMN.VHC_ID IS NULL THEN 'NON'
ELSE 'OUI'
END AS CAMION
FROM T_VEHICULE_VHC AS VHC
LEFT OUTER JOIN T_AVION_AVN AS AVN
ON VHC.VHC_ID = AVN.VHC_ID
LEFT OUTER JOIN T_BATEAU_BTO AS BTO
ON VHC.VHC_ID = BTO.VHC_ID
LEFT OUTER JOIN T_CAMION_CMN AS CMN
ON VHC.VHC_ID = CMN.VHC_ID
VHC_ID VHC_NOM AVION BATEAU CAMION
----------- -------------------------------- ----- ------ ------
1 AIRBUS A320 OUI NON NON
2 LA CAPLYPSO NON OUI NON
3 VOLVO D2800 NON NON OUI
4 BOEING 747B OUI NON NON
5 LE TITANICK NON OUI NON
6 DODGE VF512 NON NON OUI
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
"Gilles TOURREAU" a écrit :
Bonjour tout le monde !
Voilà, j'ai une table Parent et 4 tables Enfants (Enfant1, ...etc)
Toutes les tables enfants sont reliées à la table parent avec un
identifiant IdParent.
Je voudrais avoir pour chaque enregistrement Parent :
- Le contenu de l'enregistrement parent
- 4 booléens qui indiquent si oui ou non il existe au moins un
enregistrement dans une table enfant.
Du style :
IdParent | RubParent1 | RubParentN | ExisteEnfant1 | ExisteEnfantN
4 BLABLA TITI Oui Non
21245 TOTO BIBI Oui Oui
L'idéal, ca serait le tout en une requête SQL...
Le best ca serait une requête SQL normalisé indépendante de la base de
données, car cette requête risque d'être executée dans différents type
de base de données...
CREATE TABLE T_VEHICULE_VHC (VHC_ID INT NOT NULL PRIMARY KEY IDENTITY, VHC_NOM VARCHAR(32))
INSERT INTO T_VEHICULE_VHC VALUES ('AIRBUS A320') INSERT INTO T_VEHICULE_VHC VALUES ('LA CAPLYPSO') INSERT INTO T_VEHICULE_VHC VALUES ('VOLVO D2800') INSERT INTO T_VEHICULE_VHC VALUES ('BOEING 747B') INSERT INTO T_VEHICULE_VHC VALUES ('LE TITANICK') INSERT INTO T_VEHICULE_VHC VALUES ('DODGE VF512')
CREATE TABLE T_AVION_AVN (VHC_ID INT NOT NULL PRIMARY KEY, AVN_CAPACITE INT, AVN_RAYON_ACTION INT)
INSERT INTO T_AVION_AVN VALUES (1, 120, 2400) INSERT INTO T_AVION_AVN VALUES (4, 300, 7200)
CREATE TABLE T_BATEAU_BTO (VHC_ID INT NOT NULL PRIMARY KEY, BTO_TIRANT_EAU INT)
INSERT INTO T_BATEAU_BTO VALUES (2, 60) INSERT INTO T_BATEAU_BTO VALUES (5, 2541)
CREATE TABLE T_CAMION_CMN (VHC_ID INT NOT NULL PRIMARY KEY, CMN_TONNAGE INT)
INSERT INTO T_CAMION_CMN VALUES (3, 38) INSERT INTO T_CAMION_CMN VALUES (6, 22)
SELECT VHC.*, CASE WHEN AVN.VHC_ID IS NULL THEN 'NON' ELSE 'OUI' END AS AVION, CASE WHEN BTO.VHC_ID IS NULL THEN 'NON' ELSE 'OUI' END AS BATEAU, CASE WHEN CMN.VHC_ID IS NULL THEN 'NON' ELSE 'OUI' END AS CAMION FROM T_VEHICULE_VHC AS VHC LEFT OUTER JOIN T_AVION_AVN AS AVN ON VHC.VHC_ID = AVN.VHC_ID LEFT OUTER JOIN T_BATEAU_BTO AS BTO ON VHC.VHC_ID = BTO.VHC_ID LEFT OUTER JOIN T_CAMION_CMN AS CMN ON VHC.VHC_ID = CMN.VHC_ID
VHC_ID VHC_NOM AVION BATEAU CAMION ----------- -------------------------------- ----- ------ ------ 1 AIRBUS A320 OUI NON NON 2 LA CAPLYPSO NON OUI NON 3 VOLVO D2800 NON NON OUI 4 BOEING 747B OUI NON NON 5 LE TITANICK NON OUI NON 6 DODGE VF512 NON NON OUI
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
"Gilles TOURREAU" a écrit :
Bonjour tout le monde !
Voilà, j'ai une table Parent et 4 tables Enfants (Enfant1, ...etc) Toutes les tables enfants sont reliées à la table parent avec un identifiant IdParent.
Je voudrais avoir pour chaque enregistrement Parent :
- Le contenu de l'enregistrement parent - 4 booléens qui indiquent si oui ou non il existe au moins un enregistrement dans une table enfant.
Du style :
IdParent | RubParent1 | RubParentN | ExisteEnfant1 | ExisteEnfantN 4 BLABLA TITI Oui Non 21245 TOTO BIBI Oui Oui
L'idéal, ca serait le tout en une requête SQL... Le best ca serait une requête SQL normalisé indépendante de la base de données, car cette requête risque d'être executée dans différents type de base de données...
En vous remerciant par avance de vos lumières...
-- Gilles TOURREAU Responsable informatique
Société P.O.S Spécialiste en motoculture depuis + de 30 ans ! http://www.pos.fr