在MS SQL Server中,我有两个表[Products]和[Product_img]有关系(ONE TO MANY)。
SELECT p_id,name FROM dbo.products
| 15 | | name1 |
| 17 | | name2 |
SELECT p_id,path FROM dbo.product_img
| 1.jpg | | 15 |
| 2.jpg | | 15 |
| 3.JPG | | 17 |
| 4.jpg | | 17 |
SELECT dbo.product_img.p_id,dbo.products.name,dbo.product_img.path FROM dbo.product_img INNER JOIN dbo.products ON dbo.product_img.p_id = dbo.products.p_id
| 15 | | name1 | | 1.jpg |
| 15 | | name1 | | 2.jpg |
| 17 | | name2 | | 3.jpg |
| 17 | | name2 | | 4.jpg |
什么是可以显示这样的表的SQL语句(没有重复)?
| 15 | | name1 | | 1.jpg | | 2.jpg |
| 17 | | name2 | | 3.jpg | | 4.jpg |
答案 0 :(得分:3)
使用MAX和MIN
SELECT
dbo.product_img.p_id
, dbo.products.name
, MAX(dbo.product_img.path)
, MIN(dbo.product_img.path)
FROM dbo.product_img
INNER JOIN dbo.products
ON dbo.product_img.p_id = dbo.products.p_id
GROUP BY dbo.product_img.p_id , dbo.products.name
答案 1 :(得分:3)
如果每个产品可以有两个以上的图像,那么可以使用img路径获得一个列。
select
p.p_id,
p.name,
stuff((select ', '+i.path
from product_img as i
where p.p_id = i.p_id
for xml path(''), type).value('text()[1]', 'nvarchar(max)'), 1, 2, '') as path
from products as p
结果
p_id name path
----- ----- ------------
15 name1 1.jpg, 2.jpg
17 name2 3.jpg, 4.jpg