Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

536
Views
Cómo construir una consulta sql compleja usando typeorm

Visión general

La empresa para la que trabajo utiliza una empresa de terceros para administrar/desarrollar nuestra base de datos de comercio electrónico y nuestra API. Solo tengo acceso de lectura a la base de datos, pero con acceso de lectura, puedo consultar todos los productos y obtener lo que necesito en aproximadamente 1 segundo.

Tema

En nuestro backend usamos GraphQL para comunicarnos con la API y extraer todos los productos de la API toma 15 segundos, está lleno de errores y es inaceptable.

Meta

Tengo una consulta de selección bastante compleja que escribí que quiero probar e implementar usando typeorm. Solo necesito esta consulta para la aplicación.

La consulta

 select a.Disabled, a.recordnumber ItemID, CASE WHEN c.ParentID IS NOT NULL THEN 'IS Parent' ELSE 'IS NOT Parent' END AS ParentItem, a.SKU, b.ProductName, b.Description, a.Image MainImage, b.LanguageCode, a.CategoryID, a.SortOrder, a.Weight, a.Height, a.Length, a.Width, a.last_modified, a.FlagCancer, a.FlagBirthDefects, d.recordnumber DiscountID, d.last_modified DiscountIDUpdated, e.AssociateTypeID PriceGroupID, f.OrderTypeID, g.RegionID, h.StoreID, d.Start DiscountStart, d.[End] DiscountEnd, d.Price, d.PriceCurrency, d.CV, d.QV, d.RewardPointsEarned RewardPoints from INV_Inventory a join INV_LanguageValues b on a.recordnumber = b.ItemID left join ( select a.ItemID ParentID from INV_OptionItemsKeys a group by a.ItemID ) c on a.recordnumber = c.ParentID join INV_Discounts d on a.recordnumber = d.ItemID join INV_Discount_ATypes e on d.recordnumber = e.DiscountID join INV_Discount_OrderTypes f on d.recordnumber = f.DiscountID join INV_Discount_Regions g on d.recordnumber = g.DiscountID join INV_Discount_StoreMap h on d.recordnumber = h.DiscountID where c.ParentID is not null and b.LanguageCode = 'en' and g.RegionID = 1

Si tiene alguna idea mejor sobre cómo hacer esto, definitivamente soy todo oídos y agradecería cualquier ayuda.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

(Por favor, no reutilice un alias ( a ); hace que sea difícil seguir el SQL).

Considere la siguiente modificación. En lugar de esta expresión

 CASE WHEN c.ParentID IS NOT NULL THEN 'IS Parent' ELSE 'IS NOT Parent' END AS ParentItem,

más esta LEFT JOIN

 left join ( SELECT a.ItemID ParentID from INV_OptionItemsKeys a group by a.ItemID ) c ON a.recordnumber = c.ParentID

Solo tienes esta expresión:

 IF ( EXISTS( SELECT 1 FROM INV_OptionItemsKeys WHERE ItemID = a.recordnumber ), 'IS Parent', 'IS NOT Parent' ) AS ParentItem,

(Tal vez eso se pueda modificar mediante ingeniería inversa para tipificar).

Por otro lado, dado que tiene c.ParentID is not null , IS Parent siempre es el caso?

Algunos de estos índices pueden ser útiles:

 b: INDEX(LanguageCode, ItemID, ProductName, Description) d: INDEX(ItemID) e: INDEX(DiscountID, AssociateTypeID) f: INDEX(DiscountID, OrderTypeID) g: INDEX(RegionID, DiscountID) h: INDEX(DiscountID, StoreID) INV_OptionItemsKeys INDEX(ItemID)
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!