Voici une requête MySQL Je suis en cours d'exécution:Garder SQL à sec
-- get the sid of every supplier who does not supply both a red and green part
SELECT Suppliers.sid, Parts.color
FROM Suppliers
JOIN Catalog ON Catalog.sid = Suppliers.sid
JOIN Parts ON Parts.pid = Catalog.pid
WHERE Suppliers.sid NOT IN (
SELECT Suppliers.sid
FROM Suppliers
JOIN Catalog ON Catalog.sid = Suppliers.sid
JOIN Parts ON Parts.pid = Catalog.pid
WHERE Parts.color IN ('red', 'green')
GROUP BY Suppliers.sid
HAVING COUNT(DISTINCT Parts.color) = 2
)
ORDER BY Suppliers.sid DESC;
Comme vous pouvez le voir, cela se répète deux fois:
FROM Suppliers
JOIN Catalog ON Catalog.sid = Suppliers.sid
JOIN Parts ON Parts.pid = Catalog.pid
Que puis-je faire pour ne déclarer cette fois, et le référencer deux fois? Ou est-ce un signe que toute ma requête est imparfaite en quelque sorte?
Le problème est exacerbé lorsque j'ai 15 requêtes différentes que je cours avec ces mêmes trois lignes.
Une vue permet de résoudre le problème de SQL répété, comme indiqué par Scwagner. Il fournit également un niveau d'abstraction utile entre le stockage de la table physique et l'apparence logique des données dans votre application. –
Mais attention, une vue peut vous mordre dans le cul si vous l'utilisez trop, surtout quand la vue retourne plus de colonnes que vous n'en avez besoin dans votre cas particulier ou fait beaucoup de jointures inutiles. Si vous êtes après des performances simples, il vous suffit de sécher – CResults