我不知道这个查询有什么问题:
select * from products , top 1 * from pic
where products.productId = pic.productId
我有产品和图片表,每个产品可以有1到n张图片,我想返回每个产品和它的第一张图片。
下面的图示可能会有所帮助:
我不知道这个查询有什么问题:
select * from products , top 1 * from pic
where products.productId = pic.productId
你需要有一种独特的方式来标识每张图片,所以我假设该表格有一个ID列...
SELECT
*
FROM
products
LEFT JOIN
pic
ON pic.Id = (SELECT TOP 1 id FROM pic WHERE productID = products.ProductID ORDER BY id DESC)
编辑
受另一个回答的启发,改用APPLY方法...
SELECT
*
FROM
products
OUTER APPLY
(SELECT TOP 1 * FROM pic WHERE productID = products.ProductID ORDER BY id DESC) AS pic
你需要使用子查询来:
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
还有一种方法是使用子部分,但请尽量避免在您的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