2010-05-21 138 views
0

,我有以下结果由三个表的加入,一个文章表设置,一个产品表,文章,产品映射表。问题与在SQL复制加入

我想重复删除的结果类似于选择不同的内容ID。

当前结果集:

[ContendId] [Title]   [productId] 
1   article one  2 
1   article one  3 
1   article one  9 
4   article four  1 
4   article four  10 
4   article four  14 
5   article five  1 
6   article six  8 
6   article six  10 
6   article six  11 
6   article six  13 
7   article seven 14 

所需的结果集:

[ContendId] [Title]   [productId] 
1   article one  * 
4   article four  * 
5   article five  * 
6   article six  * 
7   article seven * 

下面是相关SQL冷凝例如:

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'tempdb.dbo.products') AND type = (N'U')) 
drop table tempdb.dbo.products 
go 
CREATE TABLE tempdb.dbo.products ( 
productid int, 
productname varchar(255) 
) 

go 

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'articles') AND type = (N'U')) 
drop table tempdb.dbo.articles 
go 
create table tempdb.dbo.articles (
contentid int, 
title varchar(255) 
) 

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'articles') AND type = (N'U')) 
drop table tempdb.dbo.articles 
go 
create table tempdb.dbo.articles (
contentid int, 
title varchar(255) 
) 


IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'articleproducts') AND type = (N'U')) 
drop table tempdb.dbo.articleproducts 
go 
create table tempdb.dbo.articleproducts (
contentid int, 
productid int 
) 


insert into tempdb.dbo.products values (1,'product one'), 
             (2,'product two'), 
             (3,'product three'), 
             (4,'product four'), 
             (5,'product five'), 
             (6,'product six'), 
             (7,'product seven'), 
             (8,'product eigth'), 
             (9,'product nine'), 
             (10,'product ten'), 
             (11,'product eleven'), 
             (12,'product twelve'), 
             (13,'product thirteen'), 
             (14,'product fourteen') 

insert into tempdb.dbo.articles VALUES (1,'article one'), 
             (2, 'article two'), 
             (3, 'article three'), 
             (4, 'article four'), 
             (5, 'article five'), 
             (6, 'article six'), 
             (7, 'article seven'), 
             (8, 'article eight'), 
             (9, 'article nine'), 
             (10, 'article ten') 


INSERT INTO tempdb.dbo.articleproducts VALUES (1,2), 
               (1,3), 
               (1,9), 
               (4,1), 
               (4,10), 
               (4,14), 
               (5,1), 
               (6,8), 
               (6,10), 
               (6,11), 
               (6,13), 
               (7,14) 

GO 


select DISTINCT(a.contentid), a.title, p.productid from articles a 
     JOIN articleproducts ap ON a.contentid = ap.contentid 
     JOIN products p ON a.contentid = ap.contentid AND p.productid = ap.productid 

     ORDER BY a.contentid 

回答

1

你的问题必须失去了一些东西...

SELECT DISTINCT a.* 
FROM articles AS a 
INNER JOIN articleproducts AS ap 
    ON a.contentid = ap.contentid 
ORDER BY a.contentid 
+0

+1包括产品表正在导致欺骗,谢谢! – 2010-05-21 17:05:31

1

就想通了。我需要一个适当的Group By条款

选择a.contentid,a.title,COUNT(*) 从文章JOIN articleproducts AP ON a.contentid = ap.contentid JOIN产品P于 a.contentid = ap.contentid和 p.productid = ap.productid集团通过 a.contentid,a.title ORDER BY a.contentid

0
SELECT DISTINCT(a.contentid), a.title, p.productid 
    FROM articles a 
    INNER JOIN articleproducts ap 
     ON a.contentid = ap.contentid 
    INEER JOIN products p 
     ON a.contentid = ap.contentid 
     AND p.productid = ap.productid 
    GROUP BY (a.contentid), a.title 
    ORDER BY a.contentid 

这应该工作!

+0

如果指定了SELECT DISTINCT,则ORDER BY项目必须出现在选择列表中。 – 2010-05-21 17:04:42