requête SQL Server top

Je ne sais pas ce qui ne va pas avec cette requête:

select * from products , top 1 * from pic where products.productId = pic.productId 

J'ai des produits et des tables Pic, chaque produit pourrait avoir 1 à n pic et je voudrais returnner chaque produit et la première photo de cette

L'image du diagramme peut aider entrez la description de l'image ici

Vous devez avoir un moyen d'identifier chaque image de manière unique, donc je suppose que cette table est une colonne d'ID …

 SELECT * FROM products LEFT JOIN pic ON pic.Id = (SELECT TOP 1 id FROM pic WHERE productID = products.ProductID ORDER BY id DESC) 

MODIFIER

Inspiré par une autre réponse, utilisez APPLY à la place …

 SELECT * FROM products OUTER APPLY (SELECT TOP 1 * FROM pic WHERE productID = products.ProductID ORDER BY id DESC) AS pic 

Vous avez besoin d'une sous-requête pour

  • select les premiers PicID pour chaque ProductID
  • joindre à Pic table lui-même pour get les colonnes supplémentaires
  • joindre avec Produits pour get les colonnes de produits

Déclaration SQL

 SELECT * FROM Products prod LEFT OUTER JOIN Pic p ON p.ProductID = prod.ProductID LEFT OUTER JOIN ( SELECT PicID = MIN(PicID) , ProductID FROM Pic GROUP BY ProductID ) pm ON pm.PicID = p.PicID 

Il y a aussi moyen avec la sous-section mais s'il vous plaît évitez de sélectionner autant que vous le pouvez dans votre TSQL

 Select * ,(select top(1) adress from pic where pic.productid=products.id /* if u wanna you also can order by id */ ) as Id from products