URL: https://linuxfr.org/forums/programmation-sql/posts/sous-requetes-et-alias Title: Sous requêtes et alias Authors: audionuma Date: 2025年04月10日T17:37:36+02:00 License: CC By-SA Tags: sql Score: 3 Bonjour, j'essaye de faire une mini base de gestion de stock. Ça ressemble à cela (sous sqlite) : ```sql DROP VIEW IF EXISTS VueMouvements; DROP TABLE IF EXISTS Mouvements; DROP TABLE IF EXISTS Emplacements; DROP TABLE IF EXISTS Produits; CREATE TABLE Produits ( id INTEGER PRIMARY KEY, nom TEXT UNIQUE NOT NULL ); CREATE TABLE Emplacements (id INTEGER PRIMARY KEY, nom TEXT UNIQUE NOT NULL); CREATE TABLE Mouvements ( id INTEGER PRIMARY KEY, produit INTEGER NOT NULL REFERENCES Produits (id), qte_mvmt INTEGER NOT NULL DEFAULT 1 CHECK (qte_mvmt>= 1), origine INTEGER NOT NULL REFERENCES Emplacements (id), destination INTEGER NOT NULL REFERENCES Emplacements (id), CHECK (origine != destination) ); INSERT INTO Produits (nom) VALUES ('chaussettes'), ('pull'), ('chemise'); INSERT INTO Emplacements (nom) VALUES ('Tiroir'), ('Placard'), ('Commode'); INSERT INTO Mouvements (produit, qte_mvmt, origine, destination) VALUES (1, 5, 3, 1), (2, 5, 3, 1), (3, 5, 3, 1), (1, 1, 1, 2), (2, 2, 1, 3); CREATE VIEW VueMouvements AS SELECT Mouvements.id AS 'id', Produits.nom AS 'prod', Mouvements.qte_mvmt AS 'qté', orig.nom AS 'orig.', dest.nom AS 'dest.' FROM Mouvements JOIN Produits ON Produits.id = Mouvements.produit JOIN Emplacements AS orig ON orig.id = Mouvements.origine JOIN Emplacements AS dest ON dest.id = Mouvements.destination; ``` Maintenant, je voudrais connaître l'état des stocks (éventuellement négatif, j'en suis conscient) par produit et emplacement. La requête suivante fonctionne (elle produit le résultat escompté, sommes respectives des entrées et sorties de produits par emplacements) : ```sql SELECT Produits.nom, Emplacements.nom, (SELECT SUM(Mouvements.qte_mvmt) FROM Mouvements WHERE (Mouvements.produit = Produits.id AND Mouvements.destination = Emplacements.id) GROUP BY Mouvements.produit, Mouvements.origine) AS 'entrées', (SELECT SUM(Mouvements.qte_mvmt) FROM Mouvements WHERE (Mouvements.produit = Produits.id AND Mouvements.origine = Emplacements.id) GROUP BY Mouvements.produit, Mouvements.origine) AS 'sorties' FROM Produits, Emplacements; ``` mais je n'arrive pas à ensuite effectuer la différence des deux résultats de sous-requêtes, genre : ```sql SELECT ('entrées' - 'sorties') ``` qui renvoie `0` sur chaque ligne. J'ai essayé laborieusement avec différentes combinaisons de simples/doubles guillemets sur les noms d'alias mais sans succès. Est-ce que c'est un problème de structure inadaptée ? J'ai envisagé de mettre à jour une table d'état des stocks par produit et emplacement en utilisant des triggers sur les modifications de la table `Mouvements` mais cela m'a paru laborieux.

AltStyle によって変換されたページ (->オリジナル) /