2012-02-28 115 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