Mam dwie tabele MySQL (produkt i historia cena), że chciałabym dołączyć:Jak zrobić "odrębny" join z MySQL
Product
tabela:
Id = int
Name = varchar
Manufacturer = varchar
UPC = varchar
Date_added = datetime
Price_h
tabela:
Id = int
Product_id = int
Price = int
Date = datetime
mogę wykonać proste 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;
Ale zgodnie z oczekiwaniami, jeśli mam więcej niż jeden wpis dla produktu w tabeli historii cen, otrzymuję jeden wynik dla każdej ceny historycznej.
W jaki sposób struktura może zostać sprzężona, która zwróci tylko jedną instancję każdego produktu z dołączonym do niej tylko najnowszym wpisem z tabeli historii cen?
+1: Powinien być szybszy niż mój. Chociaż dłuższy kod. – a1ex07
Rozumiem, dlaczego mówisz, że powinno być szybciej, ale muszę jeszcze znaleźć taką okoliczność, w której jest. Myślę, że może to mieć coś wspólnego z dużą liczbą rekordów, które mam w tabeli historii cen (3,5M). Być może byłoby pomocne, jeśli dodałem indeks do kolumny Price_h.date? –
Wygląda na to, że zapytanie to zajmuje mniej więcej tyle samo czasu, niezależnie od tego, ile wyników zwraca, podczas gdy kwerenda a1ex07 trwa dłużej ze zwiększonymi wynikami, jak można się było spodziewać. Byłem tylko trochę zaskoczony tym, jak powolne jest to dla małych zestawów wyników i jak szybkie jest rozwiązanie a1ex07 dla tego samego małego zestawu wyników. Ponieważ w "rzeczywistym świecie" będę pracował z raczej dużymi zestawami wyników, które wybrałem jako odpowiedź. –