Aller au contenu

Problème de requête SQL


mathieu147

Sujets conseillés

Bonjour,

Dans le cadre d'une application de gestion de vidéothèque, j'ai une table Emprunt et une table Exemplaire:

CREATE TABLE `Emprunt` (
`code_personne` int(11) NOT NULL,
`code_film` int(11) NOT NULL,
`code_exemplaire` int(11) NOT NULL,
`date_emprunt` date NOT NULL,
`date_restitution` date NOT NULL,
PRIMARY KEY (`code_personne`,`code_film`,`code_exemplaire`,`date_emprunt`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--

-- Contenu de la table `Emprunt`

--

INSERT INTO `Emprunt` (`code_personne`, `code_film`, `code_exemplaire`, `date_emprunt`, `date_restitution`) VALUES

(1, 1, 1, '2007-04-20', '2007-04-21'),

(1, 2, 1, '2007-04-21', '2007-04-23'),

(2, 1, 1, '2007-04-21', '2007-04-22'),

(3, 3, 1, '2007-04-22', '2007-04-25'),

(4, 4, 1, '2007-04-23', '0000-00-00'),

(5, 4, 3, '2007-04-24', '0000-00-00');

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

--

-- Structure de la table `Exemplaire`

--

CREATE TABLE `Exemplaire` (

`code_exemplaire` int(11) NOT NULL auto_increment,

`code_film` int(11) NOT NULL,

`code_media` int(11) NOT NULL,

`code_localisation` int(11) NOT NULL,

PRIMARY KEY (`code_exemplaire`,`code_film`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5;

--

-- Contenu de la table `Exemplaire`

--

INSERT INTO `Exemplaire` (`code_exemplaire`, `code_film`, `code_media`, `code_localisation`) VALUES

(1, 1, 1, 1),

(1, 2, 2, 2),

(2, 1, 2, 3),

(2, 2, 3, 4),

(3, 1, 1, 1),

(4, 1, 1, 2),

(4, 2, 2, 3),

(4, 3, 3, 4);

J'aimerais déterminer le code_film et le code_exemplaire des exemplaires qui ne sont actuellement pas en location.

Un exemplaire est en location si, dans la table Emprunt, il y a une ligne dont le code_exemplaire ET le code_film correspondent, et que la date de restitution est "0000-00-00").

J'ai pensé que je pourrais faire

SELECT code_exemplaire, code_film
FROM Exemplaire

pour avoir les code_film et code_exemplaire de tous les exemplaires, puis

SELECT code_exemplaire, code_film
FROM Emprunt
WHERE date_restitution!="0000-00-00"

puis de faire la différence des deux, donc ceci;

SELECT code_exemplaire, code_film
FROM Exemplaire
DIFF
SELECT code_exemplaire, code_film
FROM Emprunt
WHERE date_restitution!="0000-00-00"

sauf que j'ai une error in my SQL syntax... Apparemment on ne peut pas utiliser DIFF en MySQL?

Comment puis-je faire?

Merci d'avance!

Modifié par mathieu147
Lien vers le commentaire
Partager sur d’autres sites

J'ai trouvé :)

SELECT DISTINCT code_film, code_exemplaire
FROM Exemplaire
LEFT JOIN Emprunt
USING (code_film, code_exemplaire)
WHERE date_restitution!="0000-00-00"
OR date_restitution IS NULL

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...