requete de paires dans sql
Posté : 19 févr. 2013, 23:31
Bonjour,
jai un problème pour faire un requête qui demande d'afficher deux noms qui ont en commun un point.
Ma table est -- cette table contient toutes les équipes de la ligue.
DROP TABLE equipe CASCADE CONSTRAINTS;
CREATE TABLE equipe
(
noEquipe numeric(3),
nom char(10),
ville char(10),
PRIMARY KEY (noEquipe)
);
-- cette table contient tous les joueurs de la ligue.
-- l'attribut noJoueur identifie un joueur de manière
-- unique; il garde ce numéro durant toute sa vie dans la
-- ligue.
DROP TABLE joueur CASCADE CONSTRAINTS;
CREATE TABLE joueur
(
noJoueur numeric(3),
nom char(10),
PRIMARY KEY (noJoueur)
);
-- contrat liant un joueur à une équipe pour une durée
-- déterminée. Un joueur peut jouer pour plusieurs équipes
-- dans sa carrière, mais pour une seule équipe à la fois,
-- naturellement
DROP TABLE contrat CASCADE CONSTRAINTS;
CREATE TABLE contrat
(
noEquipe numeric(3),
noJoueur numeric(3),
dateDebut date,
dateFin date,
salaire numeric(3),
PRIMARY KEY (noJoueur,dateDebut),
FOREIGN KEY (noJoueur) REFERENCES joueur,
FOREIGN KEY (noEquipe) REFERENCES equipe
);
-- contient les parties jouées dans la ligue
DROP TABLE partie CASCADE CONSTRAINTS;
CREATE TABLE partie
(
noEquipe1 numeric(3),
noEquipe2 numeric(3),
dateJouee date,
PRIMARY KEY (noEquipe1,noEquipe2,dateJouee),
FOREIGN KEY (noEquipe1) REFERENCES equipe,
FOREIGN KEY (noEquipe2) REFERENCES equipe
);
-- donne les marqueurs d'une partie
-- pour les fins des exercices, prenez note
-- que les attributs nbButs et nbPasses peuvent contenir des
-- valeurs null, parfois les deux en même temps.
DROP TABLE marqueur CASCADE CONSTRAINTS;
CREATE TABLE marqueur
(
noJoueur numeric(3),
datePartie date,
nbButs numeric(3),
nbPasses numeric(3),
PRIMARY KEY (noJoueur,datePartie),
FOREIGN KEY (noJoueur) REFERENCES joueur
et ma requete est :
Retourner les paires de joueurs qui ont signé un contrat avec exactement les mêmes
équipes. Affichez le nom du joueur 1 et le nom du joueur 2, en ordre croissant de nom.
Ne pas afficher la même paire deux fois.
bon jusquà maintenant j'ai fait :
SELECT j1.nom, j2.nom
FROM joueur j1, joueur j2, contrat, equipe
WHERE j1.nojoueur=contrat.nojoueur
AND equipe.noequipe=contrat.noequipe
AND j1.nom!=j2.nom
INTERSECT
SELECT j1.nom, j2.nom
FROM joueur j1, joueur j2, contrat, equipe
WHERE equipe.noequipe=contrat.noequipe
AND j1.nom!=j2.nom
mais il me reste à éliminer les doublons et les paires qui n'ont pas exactement les mêmes équipes... quelqu'un pourrait m'aider svp!
jai un problème pour faire un requête qui demande d'afficher deux noms qui ont en commun un point.
Ma table est -- cette table contient toutes les équipes de la ligue.
DROP TABLE equipe CASCADE CONSTRAINTS;
CREATE TABLE equipe
(
noEquipe numeric(3),
nom char(10),
ville char(10),
PRIMARY KEY (noEquipe)
);
-- cette table contient tous les joueurs de la ligue.
-- l'attribut noJoueur identifie un joueur de manière
-- unique; il garde ce numéro durant toute sa vie dans la
-- ligue.
DROP TABLE joueur CASCADE CONSTRAINTS;
CREATE TABLE joueur
(
noJoueur numeric(3),
nom char(10),
PRIMARY KEY (noJoueur)
);
-- contrat liant un joueur à une équipe pour une durée
-- déterminée. Un joueur peut jouer pour plusieurs équipes
-- dans sa carrière, mais pour une seule équipe à la fois,
-- naturellement
DROP TABLE contrat CASCADE CONSTRAINTS;
CREATE TABLE contrat
(
noEquipe numeric(3),
noJoueur numeric(3),
dateDebut date,
dateFin date,
salaire numeric(3),
PRIMARY KEY (noJoueur,dateDebut),
FOREIGN KEY (noJoueur) REFERENCES joueur,
FOREIGN KEY (noEquipe) REFERENCES equipe
);
-- contient les parties jouées dans la ligue
DROP TABLE partie CASCADE CONSTRAINTS;
CREATE TABLE partie
(
noEquipe1 numeric(3),
noEquipe2 numeric(3),
dateJouee date,
PRIMARY KEY (noEquipe1,noEquipe2,dateJouee),
FOREIGN KEY (noEquipe1) REFERENCES equipe,
FOREIGN KEY (noEquipe2) REFERENCES equipe
);
-- donne les marqueurs d'une partie
-- pour les fins des exercices, prenez note
-- que les attributs nbButs et nbPasses peuvent contenir des
-- valeurs null, parfois les deux en même temps.
DROP TABLE marqueur CASCADE CONSTRAINTS;
CREATE TABLE marqueur
(
noJoueur numeric(3),
datePartie date,
nbButs numeric(3),
nbPasses numeric(3),
PRIMARY KEY (noJoueur,datePartie),
FOREIGN KEY (noJoueur) REFERENCES joueur
et ma requete est :
Retourner les paires de joueurs qui ont signé un contrat avec exactement les mêmes
équipes. Affichez le nom du joueur 1 et le nom du joueur 2, en ordre croissant de nom.
Ne pas afficher la même paire deux fois.
bon jusquà maintenant j'ai fait :
SELECT j1.nom, j2.nom
FROM joueur j1, joueur j2, contrat, equipe
WHERE j1.nojoueur=contrat.nojoueur
AND equipe.noequipe=contrat.noequipe
AND j1.nom!=j2.nom
INTERSECT
SELECT j1.nom, j2.nom
FROM joueur j1, joueur j2, contrat, equipe
WHERE equipe.noequipe=contrat.noequipe
AND j1.nom!=j2.nom
mais il me reste à éliminer les doublons et les paires qui n'ont pas exactement les mêmes équipes... quelqu'un pourrait m'aider svp!