Je suis un peu nouveau à SQL et je me suis battu pour obtenir le résultat que je veux.
J'ai ces tables: p>
et mon objectif est de produire ceci: p>
à des fins de traduction: emprunt == emprunté, livre == livre , Oeuvre == Collection P>
Donc, mon objectif est d'obtenir tous les livres ID (ID_LIVRE), leur nom de collection (Titre) et un booléen:
Vrai s'ils sont empruntés (id_livre in emprunt table)
Faux sinon p>
J'ai fait ceci: p> et obtenu cette sortie: p> Donc, je suis proche de ce que je veux, je crois, mais je ne sais pas comment avoir un test de retour d'un booléen au lieu d'id_emprunt dans la 3ème colonne p> Toute aide appréciée, merci. P> p>
3 Réponses :
Votre code est très proche comme vous l'avez dit. Vous pouvez utiliser une instruction code> sur la troisième colonne pour modifier la sortie en T code> ou
f code> en fonction de la valeur de
id_emprunt Code>:
SELECT livre.id_livre,
titre,
CASE
WHEN id_emprunt IS NULL THEN 'f'
ELSE 't'
END AS est_emprunte
FROM livre NATURAL JOIN oeuvre LEFT JOIN emprunt ON livre.id_livre = emprunt.id_livre
ORDER BY id_livre;
Utilisez simplement un cas code> Expression:
(e.id_emprunt IS NOT NULL) as est_emprunte
Il vous suffit d'utiliser un cas. Donc:
SELECT livre.id_livre , titre , CASE WHEN id_emprunt IS NULL THEN 'f' ELSE 't' END AS est_emprunte FROM livre LEFT JOIN oeuvre USING(id_oeuvre) LEFT JOIN emprunt USING(id_livre) ORDER BY id_livre
"PL / SQL" est une langue procédurale spécifique à Oracle RDBMS. Vous semblez utiliser SQL à Postgres.
Veuillez Ne postez pas de code comme des images Voir ici pour plus de détails pourquoi:meta.stackoverflow.com/questions/285551
J'ai supprimé la balise PL / SQL comme cela était complètement faux. Et les captures d'écran montrent clairement que Postgres est utilisé, pas Oracle.
Oh, désolé je ne savais pas que, merci pour la modification