it-swarm.com.de

Wie mache ich mit MySQL eine "eindeutige" Verbindung?

Ich habe zwei MySQL-Tabellen (Produkt- und Preisentwicklung), an denen ich teilnehmen möchte:

Product Tabelle:

Id = int
Name = varchar
Manufacturer = varchar
UPC = varchar
Date_added = datetime

Price_h Tabelle:

Id = int
Product_id = int
Price = int
Date = datetime

Ich kann einen einfachen LEFT JOIN ausführen:

SELECT Product.UPC, Product.Name, Price_h.Price, Price_h.Date
FROM Product
LEFT JOIN Price_h
ON Product.Id = Price_h.Product_id;

Wenn ich jedoch erwartungsgemäß mehr als einen Eintrag für ein Produkt in der Preisverlaufstabelle habe, erhalte ich für jeden historischen Preis ein Ergebnis.

Wie kann eine Struktur einer Verknüpfung, die nur eine Instanz jedes Produkts zurückgibt, nur der neueste Eintrag aus der Preisverlaufstabelle hinzugefügt wird?

19
Steven Potter

Benutzen:

   SELECT p.upc,
          p.name,
          ph.price,
          ph.date
     FROM PRODUCT p
LEFT JOIN PRICE_H ph ON ph.product_id = p.id
     JOIN (SELECT a.product_id, 
                  MAX(a.date) AS max_date
             FROM PRICE_H a
         GROUP BY a.product_id) x ON x.product_id = ph.product_id
                                 AND x.max_date = ph.date
24
OMG Ponies

Versuche dies:

SELECT Product.UPC, Product.Name, Price_h.Price, MAX(Price_h.Date)
 FROM Product
 INNER JOIN Price_h
   ON Product.Id = Price_h.Product_id
GROUP BY Product.UPC, Product.Name, Price_h.Price
3
Justin Ethier
SELECT Product.UPC, Product.Name, Price_h.Price, Price_h.Date
FROM Product
LEFT JOIN Price_h
ON (Product.Id = Price_h.Product_id AND Price_h.Date = 
  (SELECT MAX(Date) FROM Price_h ph1 WHERE ph1.Product_id = Product.Id));
3
a1ex07

Warum es nicht einfach und schnell bleiben:

SELECT 
 Product.UPC, Product.Name, Price_h.Price, Price_h.Date
FROM 
 Product
LEFT JOIN 
 Price_h
 ON Product.Id = Price_h.Product_id;
ORDER BY
 Price_h.Date DESC
LIMIT 1
0
Henry
SELECT n.product_id, 
       n.product_name,
       n.product_articul,
       n.product_price,
       n.product_discount,
       n.product_description, 
       n.product_care,
       (SELECT photo_name FROM siamm_product_photos WHERE product_id = n.product_id LIMIT 1) AS photo_name
FROM siamm_product as n;
0
vlnik