J'ai deux tables MySQL (produit et l'historique des prix) que je voudrais rejoindre:Comment faire un "distinct" se joindre à MySQL
Product
Table:
Id = int
Name = varchar
Manufacturer = varchar
UPC = varchar
Date_added = datetime
Price_h
table:
Id = int
Product_id = int
Price = int
Date = datetime
Je peux effectuer simple LEFT JOIN:
SELECT Product.UPC, Product.Name, Price_h.Price, Price_h.Date
FROM Product
LEFT JOIN Price_h
ON Product.Id = Price_h.Product_id;
Mais comme prévu si j'ai plus d'une entrée pour un produit dans l'historique des prix, j'obtiens un résultat pour chaque prix historique.
Comment une structure peut-elle structurer une jointure qui ne renvoie qu'une seule occurrence de chaque produit avec uniquement l'entrée la plus récente de la table d'historique des prix qui lui est associée?
+1: Il devrait être plus rapide que le mien. Bien que plus de code. – a1ex07
Je comprends pourquoi vous dites que cela devrait être plus rapide, mais je n'ai pas encore trouvé de situation où cela soit. Je pense que cela peut avoir quelque chose à voir avec le grand nombre d'enregistrements que j'ai dans le tableau d'historique des prix (3.5M). Peut-être que cela aiderait si j'ajoutais un index à la colonne Price_h.date? –
Il semble que cette requête prenne approximativement le même laps de temps, peu importe le nombre de résultats qu'elle renvoie, tandis que la requête de a1ex07 prend plus de temps avec des résultats accrus, comme on pouvait s'y attendre. J'étais juste un peu surpris de voir à quel point c'est lent pour de petits ensembles de résultats et à quelle vitesse la solution d'a1ex07 est pour le même petit jeu de résultats. Puisque dans le "monde réel" je vais travailler avec des ensembles de résultats assez volumineux, j'ai choisi cela comme réponse. –