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
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
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