Version complète: sur le forum Webmaster Hub : Problème de requête SQL
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > SQL
mathieu147
Bonjour,

Dans le cadre d'une application de gestion de vidéothèque, j'ai une table Emprunt et une table Exemplaire:
CODE
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
CODE
SELECT code_exemplaire, code_film
FROM Exemplaire

pour avoir les code_film et code_exemplaire de tous les exemplaires, puis
CODE
SELECT code_exemplaire, code_film
FROM Emprunt
WHERE date_restitution!="0000-00-00"

puis de faire la différence des deux, donc ceci;
CODE
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!
mathieu147
J'ai trouvé smile.gif

CODE
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
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.