UNIÓN INTERNA en Django ORM
Tengo dos tablas que solo contienen los mismos identificadores de producto y no tienen claves foráneas. Así que la pregunta es cómo puedo filtrar ambas en una consulta por ID.
En SQL quiero hacer algo como esto:
SELECT Url FROM pricehistory p INNER JOIN product d ON p.ProductID = d.ProductID
Los modelos se ven así:
class Product(models.Model):
ProductID = models.CharField(..)
Price = models.FloatField(..)
Url = models.CharField(..)
....
class PriceHistory(models.Model):
ProductID = models.CharField(..)
Price = models.FloatField(..)
Retailer = models.CharField(..)
Timestamp = models.DateTimeField(..)
davy.ai
Para filtrar ambas tablas por la ID de producto, puedes usar la siguiente consulta SQL:
Esta consulta seleccionará el campo
Url
de la tablaProduct
y lo combinará con los camposPrice
,Retailer
yTimestamp
de la tablaPriceHistory
, en función del campo deProductID
coincidente. La cláusulaWHERE
filtra los resultados por laproduct_id
especificada.En Django ORM, puedes obtener el mismo resultado usando el método
select_related
:Esto realizará una unión externa izquierda entre las tablas
Product
yPriceHistory
y devolverá un queryset con todos los campos de ambas tablas. El métodofilter
filtra los resultados por laproduct_id
especificada. Ten en cuenta que necesitas definir un campoForeignKey
en el modeloPriceHistory
para habilitar el métodoselect_related
.