2012-02-28 122 views
2
SELECT collections.title, collections.uniqueID, uploads.uniqueID as thumb 
FROM collections 
INNER JOIN uploads ON collections.uniqueID = uploads.uploadGroup 
WHERE collections.owner = @owner 

在这种情况下,如果我有3行的“上传”具有匹配的uniqueid/uploadgroup(如在一个集合中的3个上传),这使我回3行。SQL INNER与DISTINCT行加入?

我在寻找的是每行DISTINCT COLLECTIONS.UNIQUEID一行 - 这可能吗?

所以当收藏品有

1 | title | idhere 

,并上传了

1 | uniqueID1 | idhere 
2 | uniqueID2 | idhere 
3 | uniqueID3 | idhere 

我目前正在返回

1 | title | uniqueID1 
2 | title | uniqueID2 
3 | title | uniqueID3 

当所有我想要回是

1 | title | uniqueID1 
+7

为什么'1 |标题| uniqueID1不是'1 |标题| uniqueID3'?这种决定的任何标准? PS:你需要选择'mysql'或'sql-server'。该解决方案将是特定于供应商的 – zerkms 2012-02-28 21:28:41

+0

您可能希望按分组标题或排在前1行。你必须做出决定。 – AndyMcKenna 2012-02-28 21:30:43

回答

3

这里有一个方法(仅限SQL Server):

SELECT collections.title, collections.uniqueID, uploads.uniqueID as thumb 
FROM collections 
CROSS APPLY (
    SELECT TOP 1 * 
    FROM uploads 
    WHERE collections.uniqueID = uploads.uploadGroup 
    ORDER BY uploads.uniqueID -- not required, can be changed to any column you want 
) uploads 
4

如果你需要从上传表的简单不同的列表,那么你可以做这样的:

SELECT collections.title, collections.uniqueID, uploads.uniqueID as thumb 
FROM collections 
INNER JOIN (SELECT DISTINCT uniqueID FROM uploads) uploads ON collections.uniqueID = uploads.uploadGroup 
WHERE collections.owner = @owner 
2
SELECT collections.title, collections.uniqueID, min(uploads.uniqueID) as thumb 
FROM collections 
JOIN uploads ON collections.uniqueID = uploads.uploadGroup 
WHERE collections.owner = @owner 
GROUP BY collections.title, collections.uniqueID 
+0

+1 - 它很简单,适用于两者 – 2012-02-28 22:06:01