OVH Cloud OVH Cloud

Requête sur trois table

7 réponses
Avatar
Nils56
Bonjour,

J'ai trois tables Vehicule, Accident, Facture.

1 vehicule peut avoir plusieurs facture
1 vehicule peut avoir plusieurs accidents

J'aimerai dans ma requête sortir

La Marque et le modèle du véhicule ainsi que le numéro de facture ainsi
que le numéro d'accident.

Il est possible qu'une facture n'est pas de numéro d'accident.

Merci de votre aide.
Nils56

7 réponses

Avatar
SQLpro [MVP]
Nils56 a écrit :
Bonjour,

J'ai trois tables Vehicule, Accident, Facture.

1 vehicule peut avoir plusieurs facture
1 vehicule peut avoir plusieurs accidents

J'aimerai dans ma requête sortir

La Marque et le modèle du véhicule ainsi que le numéro de facture ainsi
que le numéro d'accident.

Il est possible qu'une facture n'est pas de numéro d'accident.

Merci de votre aide.
Nils56




SELECT *
FROM Vehicule V
INNER JOIN Accident A
ON V.??? = A.???
LEFT OUTER JOIN Facture F
ON V.??? = F.???


A vous de mettre les bonnes colonnes à la place des ??? On ne peut pas
les deviner !

A +

--
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 ***********************
Avatar
Nils56
SQLpro [MVP] a écrit :
Nils56 a écrit :
Bonjour,

J'ai trois tables Vehicule, Accident, Facture.

1 vehicule peut avoir plusieurs facture
1 vehicule peut avoir plusieurs accidents

J'aimerai dans ma requête sortir

La Marque et le modèle du véhicule ainsi que le numéro de facture
ainsi que le numéro d'accident.

Il est possible qu'une facture n'est pas de numéro d'accident.

Merci de votre aide.
Nils56




SELECT *
FROM Vehicule V
INNER JOIN Accident A
ON V.??? = A.???
LEFT OUTER JOIN Facture F
ON V.??? = F.???


A vous de mettre les bonnes colonnes à la place des ??? On ne peut pas
les deviner !

A +



Bonjour,

Voici la requête
Select vehicule.id_vehicule, vehicule.marque, vehicule.modele,
vehicule.plaque,
accident.no_sinistre,accident.date_accident,facture.no_facture,facture.no_dossier,facture.date,facture.clients_id,facture.vehicule_id

from vehicule
INNER JOIN accident on vehicule.id_vehicule = accident.vehicule_id
LEFT OUTER JOIN facture on vehicule.id_vehicule = facture.vehicule_id
WHERE facture.clients_id = '5584'


Résultat:

5572;"Seat";"Leon";" BE
563256";"4646465465";"2006-04-06";200600001;"";"2006-04-02";5584;5572
5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600008;"";"2006-02-02";5584;5580
5580;"VW";"Golf";"123456";"23658974";"";200600008;"";"2006-02-02";5584;5580
5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600011;"";"2006-05-06";5584;5580
5580;"VW";"Golf";"123456";"23658974";"";200600011;"";"2006-05-06";5584;5580
5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600012;"";"2006-06-06";5584;5580
5580;"VW";"Golf";"123456";"23658974";"";200600012;"";"2006-06-06";5584;5580
5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600013;"";"2006-05-05";5584;5580
5580;"VW";"Golf";"123456";"23658974";"";200600013;"";"2006-05-05";5584;5580
5572;"Seat";"Leon";" BE
563256";"4646465465";"2006-04-06";200600007;"245";"2005-05-05";5584;5572

le problème c'est que j'ai des doublons
Avatar
SQLpro [MVP]
Désolé mais il n'y a aucun doublon !


5572;"Seat";"Leon";" BE
563256";"4646465465";"2006-04-06";200600001;"";"2006-04-02";5584;5572
5572;"Seat";"Leon";" BE
563256";"4646465465";"2006-04-06";200600007;"245";"2005-05-05";5584;5572
5580;"VW";"Golf";"123456";"23658974";"";200600008;"";"2006-02-02";5584;5580
5580;"VW";"Golf";"123456";"23658974";"";200600011;"";"2006-05-06";5584;5580
5580;"VW";"Golf";"123456";"23658974";"";200600012;"";"2006-06-06";5584;5580
5580;"VW";"Golf";"123456";"23658974";"";200600013;"";"2006-05-05";5584;5580
5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600008;"";"2006-02-02";5584;5580
5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600011;"";"2006-05-06";5584;5580
5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600012;"";"2006-06-06";5584;5580
5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600013;"";"2006-05-05";5584;5580

mais vous pouvez ajouter DISTINCT


A +

Nils56 a écrit :
SQLpro [MVP] a écrit :
Nils56 a écrit :
Bonjour,

J'ai trois tables Vehicule, Accident, Facture.

1 vehicule peut avoir plusieurs facture
1 vehicule peut avoir plusieurs accidents

J'aimerai dans ma requête sortir

La Marque et le modèle du véhicule ainsi que le numéro de facture
ainsi que le numéro d'accident.

Il est possible qu'une facture n'est pas de numéro d'accident.

Merci de votre aide.
Nils56




SELECT *
FROM Vehicule V
INNER JOIN Accident A
ON V.??? = A.???
LEFT OUTER JOIN Facture F
ON V.??? = F.???


A vous de mettre les bonnes colonnes à la place des ??? On ne peut pas
les deviner !

A +



Bonjour,

Voici la requête
Select vehicule.id_vehicule, vehicule.marque, vehicule.modele,
vehicule.plaque,
accident.no_sinistre,accident.date_accident,facture.no_facture,facture.no_dossier,facture.date,facture.clients_id,facture.vehicule_id

from vehicule
INNER JOIN accident on vehicule.id_vehicule = accident.vehicule_id
LEFT OUTER JOIN facture on vehicule.id_vehicule = facture.vehicule_id
WHERE facture.clients_id = '5584'


Résultat:

5572;"Seat";"Leon";" BE
563256";"4646465465";"2006-04-06";200600001;"";"2006-04-02";5584;5572
5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600008;"";"2006-02-02";5584;5580

5580;"VW";"Golf";"123456";"23658974";"";200600008;"";"2006-02-02";5584;5580
5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600011;"";"2006-05-06";5584;5580

5580;"VW";"Golf";"123456";"23658974";"";200600011;"";"2006-05-06";5584;5580
5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600012;"";"2006-06-06";5584;5580

5580;"VW";"Golf";"123456";"23658974";"";200600012;"";"2006-06-06";5584;5580
5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600013;"";"2006-05-05";5584;5580

5580;"VW";"Golf";"123456";"23658974";"";200600013;"";"2006-05-05";5584;5580
5572;"Seat";"Leon";" BE
563256";"4646465465";"2006-04-06";200600007;"245";"2005-05-05";5584;5572

le problème c'est que j'ai des doublons




--
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 ***********************
Avatar
Nils56
SQLpro [MVP] a écrit :
Désolé mais il n'y a aucun doublon !


5572;"Seat";"Leon";" BE
563256";"4646465465";"2006-04-06";200600001;"";"2006-04-02";5584;5572
5572;"Seat";"Leon";" BE
563256";"4646465465";"2006-04-06";200600007;"245";"2005-05-05";5584;5572
5580;"VW";"Golf";"123456";"23658974";"";200600008;"";"2006-02-02";5584;5580
5580;"VW";"Golf";"123456";"23658974";"";200600011;"";"2006-05-06";5584;5580
5580;"VW";"Golf";"123456";"23658974";"";200600012;"";"2006-06-06";5584;5580
5580;"VW";"Golf";"123456";"23658974";"";200600013;"";"2006-05-05";5584;5580
5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600008;"";"2006-02-02";5584;5580

5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600011;"";"2006-05-06";5584;5580

5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600012;"";"2006-06-06";5584;5580

5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600013;"";"2006-05-05";5584;5580


mais vous pouvez ajouter DISTINCT


A +

Nils56 a écrit :
SQLpro [MVP] a écrit :
Nils56 a écrit :
Bonjour,

J'ai trois tables Vehicule, Accident, Facture.

1 vehicule peut avoir plusieurs facture
1 vehicule peut avoir plusieurs accidents

J'aimerai dans ma requête sortir

La Marque et le modèle du véhicule ainsi que le numéro de facture
ainsi que le numéro d'accident.

Il est possible qu'une facture n'est pas de numéro d'accident.

Merci de votre aide.
Nils56




SELECT *
FROM Vehicule V
INNER JOIN Accident A
ON V.??? = A.???
LEFT OUTER JOIN Facture F
ON V.??? = F.???


A vous de mettre les bonnes colonnes à la place des ??? On ne peut
pas les deviner !

A +



Bonjour,

Voici la requête
Select vehicule.id_vehicule, vehicule.marque, vehicule.modele,
vehicule.plaque,
accident.no_sinistre,accident.date_accident,facture.no_facture,facture.no_dossier,facture.date,facture.clients_id,facture.vehicule_id

from vehicule
INNER JOIN accident on vehicule.id_vehicule = accident.vehicule_id
LEFT OUTER JOIN facture on vehicule.id_vehicule = facture.vehicule_id
WHERE facture.clients_id = '5584'


Résultat:

5572;"Seat";"Leon";" BE
563256";"4646465465";"2006-04-06";200600001;"";"2006-04-02";5584;5572
5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600008;"";"2006-02-02";5584;5580

5580;"VW";"Golf";"123456";"23658974";"";200600008;"";"2006-02-02";5584;5580

5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600011;"";"2006-05-06";5584;5580

5580;"VW";"Golf";"123456";"23658974";"";200600011;"";"2006-05-06";5584;5580

5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600012;"";"2006-06-06";5584;5580

5580;"VW";"Golf";"123456";"23658974";"";200600012;"";"2006-06-06";5584;5580

5580;"VW";"Golf";"123456";"999999";"2006-01-01";200600013;"";"2006-05-05";5584;5580

5580;"VW";"Golf";"123456";"23658974";"";200600013;"";"2006-05-05";5584;5580

5572;"Seat";"Leon";" BE
563256";"4646465465";"2006-04-06";200600007;"245";"2005-05-05";5584;5572

le problème c'est que j'ai des doublons






les numéros de factures
200600008
200600011
200600012
200600013

ne doivent pas contenir les champs avec 999999 et 23658974 ceux sont des
numéro de sinistre et les factures ne sont pas lié a ce sinistre mais
seulement véhicule + facture.
Avatar
Patrice
But final ?

Le petit problème de logique est que tu veux afficher pour un véhicule deux
choses qui n'ont rien à voir entre elles. Tu peux par exemple avoir 2
factures et 3 accidents ou 3 factures et 2 accidents pour un même
véhicule... Quelle présentation voudrait tu dans ce cas ? (cela me semble
relever plus d'une structure d'état que d'un problème de requête).

De plus :
Il est possible qu'une facture n'est pas de numéro d'accident.



me semble intuile si tu as réellement :
1 vehicule peut avoir plusieurs facture
1 vehicule peut avoir plusieurs accidents



(donc les accidents et les factures ne sont de toute façn jamais liées).

Est-ce que tu n'aurais pas plutôt une structure du style :
- un véhicule
- à un véhicule 0 à n accidents
- pour un accident 0 à n factures

--
Patrice

"Nils56" a écrit dans le message de news:
446d8fe2$
Bonjour,

J'ai trois tables Vehicule, Accident, Facture.

1 vehicule peut avoir plusieurs facture
1 vehicule peut avoir plusieurs accidents

J'aimerai dans ma requête sortir

La Marque et le modèle du véhicule ainsi que le numéro de facture ainsi
que le numéro d'accident.

Il est possible qu'une facture n'est pas de numéro d'accident.

Merci de votre aide.
Nils56


Avatar
Nils56
Patrice a écrit :
But final ?

Le petit problème de logique est que tu veux afficher pour un véhicule deux
choses qui n'ont rien à voir entre elles. Tu peux par exemple avoir 2
factures et 3 accidents ou 3 factures et 2 accidents pour un même
véhicule... Quelle présentation voudrait tu dans ce cas ? (cela me semble
relever plus d'une structure d'état que d'un problème de requête).

De plus :
Il est possible qu'une facture n'est pas de numéro d'accident.



me semble intuile si tu as réellement :
1 vehicule peut avoir plusieurs facture
1 vehicule peut avoir plusieurs accidents



(donc les accidents et les factures ne sont de toute façn jamais liées).

Est-ce que tu n'aurais pas plutôt une structure du style :
- un véhicule
- à un véhicule 0 à n accidents
- pour un accident 0 à n factures




4 tables:
Clients,Vehicule,Accident,Facture

Clients 1 et à N Facture
id_client - clients_id
Clients 1 et à N Vehicule
id_client - Clients_id
Vehicule 1 et à N Accident
id_vehicule - vehicule_id

J'aimerai récupérer toutes les factures d'un client qui possède
obligatoirement un véhicule ainsi que les factures d'un client qui on un
accident avec une voiture.
Avatar
Nils56
Bonjour,

Le problème est résolu.

Erreur de laison dans un FULL OUTER JOIN

Merci à tous
Nils56

Nils56 a écrit :
Bonjour,

J'ai trois tables Vehicule, Accident, Facture.

1 vehicule peut avoir plusieurs facture
1 vehicule peut avoir plusieurs accidents

J'aimerai dans ma requête sortir

La Marque et le modèle du véhicule ainsi que le numéro de facture ainsi
que le numéro d'accident.

Il est possible qu'une facture n'est pas de numéro d'accident.

Merci de votre aide.
Nils56