J'ai une question SQL, liée à this et this question (mais différent). Fondamentalement, je veux savoir comment je peux éviter une requête imbriquée. Disons que j'ai une énorme table d'emplois (jobs
) exécutée par une entreprise dans leur histoire. Ces emplois sont caractérisés par l'année, le mois, l'emplacement et le code appartenant à l'outil utilisé pour le travail. De plus, j'ai une table d'outils (tools
), traduisant les codes d'outils en descriptions d'outils et d'autres données sur l'outil. Maintenant, ils veulent un site Web où ils peuvent sélectionner l'année, le mois, l'emplacement et l'outil en utilisant une liste déroulante, après quoi les travaux correspondants seront affichés. Je veux remplir le dernier menu déroulant uniquement avec les outils pertinents correspondant à la avant la sélection de l'année, le mois et l'emplacement, donc j'écris la requête imbriquée suivante:Comment éviter une requête SQL imbriquée dans ce cas?
SELECT c.tool_code, t.tool_description
FROM (
SELECT DISTINCT j.tool_code
FROM jobs AS j
WHERE j.year = ....
AND j.month = ....
AND j.location = ....
) AS c
LEFT JOIN tools as t
ON c.tool_code = t.tool_code
ORDER BY c.tool_code ASC
Je recours à cette requête imbriquée parce qu'il était beaucoup plus rapide que effectuer un JOIN sur la base de données complète et en sélectionner un. Il a beaucoup diminué mon temps de requête. Mais comme je l'ai lu récemment MySQL nested queries should be avoided at all cost, je me demande si je me trompe dans cette approche. Devrais-je réécrire ma requête différemment? Et comment?
Parce que je n'ai pas encore configuré les relations de clé étrangère entre les tables. Après avoir fait cela, je peux passer à un JOIN, mais pour le moment il est toujours possible d'ajouter des tâches avec des codes d'outils encore inconnus à la base de données. J'ai besoin de ces travaux pour toujours apparaître dans le select. – thomaspaulb