J'ai Table1 et Table2 liées à Table1.ID. Il peut y avoir zéro ou plusieurs enregistrements Table2 pour un Table1.ID donné. J'ai une vue où je veux obtenir Table2.Value où Table2.ID est max pour un Table1.ID donné. Un ami a suggéré une table dérivée, mais cela nécessite une sous-requête dans la clause from, et MySQL n'aime pas ça. Y a-t-il d'autres moyens de le faire? J'ai essayé de mettre en place une vue secondaire pour prendre la place de la sous-requête, mais cela semble très lent. J'ai également essayé d'utiliser une clause having pour tester Table2.ID = MAX (Table2.ID), mais elle ne reconnaît pas la colonne à moins que je ne la mette dans le groupe par, qui vissera tout le reste.MySql View - Valeur d'une colonne où une autre colonne est max
Répondre
SELECT t1.*, t2a.*
FROM Table1 t1
LEFT JOIN Table2 t2a
ON (t1.table1_id = t2a.table1_id)
LEFT JOIN Table2 t2b
ON (t1.table1_id = t2b.table1_id AND t2a.table2_id < t2b.table2_id)
WHERE t2b.table2_id IS NULL
AND t1.table1_id = ?;
Fonctionne bien! Beaucoup plus rapide que la vue secondaire. Merci. Des problèmes de performance que je devrais surveiller avec cette méthode? En ce qui concerne les tailles de table ou d'indexation ou quoi que ce soit? –
Eh bien, vous devriez toujours analyser avec EXPLAIN toute requête dont vous avez besoin pour avoir de bonnes performances, et essayez de vous assurer qu'il utilise bien les index et ne fait pas de filesort/table temporaire. Mais cette requête est à peu près aussi évolutive que vous pouvez obtenir dans une base de données normalisée. –
Ça a l'air génial. Merci encore pour votre aide. –
- 1. Insérer Max Valeur de la colonne dans une autre colonne
- 2. lignes SQL sélection où une valeur de colonne est commune à une autre colonne de critères
- 3. conclusion max dans une base MySQL lorsque la colonne est varchar
- 4. MySQL colonne ENUM de la colonne anothertable
- 5. requête SQL Distinct colonne Concatenate Autre colonne
- 6. MySQL: MIN() et MAX() contre une valeur de chaîne
- 7. Mysql: Comment interroger une colonne dont le type est bit?
- 8. mise à jour d'une valeur de colonne basée sur une autre valeur de la colonne avec Subsonic 2.1/2.2
- 9. choisir une colonne dans Dynamiquement MySQL
- 10. Comment écrire dans une colonne varchar (max) en utilisant ODBC
- 11. Requête MySQL - colonne inconnue
- 12. MySQL Texte Colonne tronquée
- 13. Mettre à jour la colonne d'une autre table - mySQL 3.5.2
- 14. Comment obtenir la valeur de colonne actuelle, valeur de colonne précédente
- 15. MySQL select qui retourne une colonne fictive?
- 16. INSERT SELECT dans MySQL avec une colonne agrégée superflue
- 17. comment puis-je écrire une requête sql qui trouve des lignes où une colonne est une sous-chaîne d'une autre colonne
- 18. Comment vérifier une colonne MySQL pour m'assurer qu'elle contient une valeur?
- 19. obtenir la valeur de l'autre colonne en dehors de la colonne de valeur dans Infragistics ultracombo
- 20. MYSQL - une colonne par élément de données ou de combiner en une seule colonne
- 21. PHP MYSQL - De nombreuses données dans une colonne
- 22. PostgreSQL: contrainte, Insérer une valeur dans la colonne uniquement si elle existe dans une autre table
- 23. copier une colonne d'identité dans une autre table
- 24. Récupérer un PK multi-colonne dans MySQL
- 25. Comment ajouter une chaîne à une valeur de colonne dans MySQL?
- 26. MySQL LEFT JOIN Problème - Colonne GAUCHE manquante
- 27. SQL UPDATE SET une colonne doit être égale à une valeur dans une table liée référencée par une colonne différente?
- 28. Comment insérer une plage de clés dans une autre colonne
- 29. Création d'une colonne mailto: lien hypertexte à l'aide d'une colonne Personne et d'une autre colonne dans SharePoint
- 30. SQL sélectionnez l'emplacement où la répétition, mais distincte sur une autre colonne
Quelle version de MySQL utilisez-vous? Il devrait être très bien avec des sous-requêtes si vous utilisez 5.x – Wade
Je suis sur la version 5.0. Les documents que j'ai lus et l'erreur que je reçois indiquent que les sous-requêtes de la clause from ne sont pas autorisées dans une vue. Est-ce seulement dans 5.0? –
C'est un bug ouvert dans MySQL: http://bugs.mysql.com/bug.php?id=12755 –