es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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(..)
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para filtrar ambas tablas por la ID de producto, puedes usar la siguiente consulta SQL:

    SELECT Url, Price, Retailer, Timestamp
    FROM pricehistory
    INNER JOIN product ON pricehistory.ProductID = product.ProductID
    WHERE pricehistory.ProductID = <product_id>
    

    Esta consulta seleccionará el campo Url de la tabla Product y lo combinará con los campos Price, Retailer y Timestamp de la tabla PriceHistory, en función del campo de ProductID coincidente. La cláusula WHERE filtra los resultados por la product_id especificada.

    En Django ORM, puedes obtener el mismo resultado usando el método select_related:

    Product.objects.filter(ProductID=<product_id>).select_related('pricehistory')
    

    Esto realizará una unión externa izquierda entre las tablas Product y PriceHistory y devolverá un queryset con todos los campos de ambas tablas. El método filter filtra los resultados por la product_id especificada. Ten en cuenta que necesitas definir un campo ForeignKey en el modelo PriceHistory para habilitar el método select_related.

Comments are closed.