如何在左连接中选择单个记录

Evi*_*mes 27 sql t-sql sql-server sql-server-2008

我需要使用其关键ModelID从Models表中选择一个特定的模型.我还需要从Model_Content表中添加一些内容.但是,Models_Content表对每个模型都有几个内容模糊.我需要选择第一个模糊.

我的表看起来像这样:

 Models // table
 ModelID // pk
 Model // varchar

 Models_Content // table
 ContentID // pk
 ModelID // fk
 Content // varchar

 SELECT M.ModelID, M.Model, C.Content
 FROM   Models M LEFT JOIN Models_Content C ON M.ModelID =  C.ModelID
 WHERE      M.ModelID = 5
Run Code Online (Sandbox Code Playgroud)

如何调整查询以选择特定模型的第一个内容模糊?

Mat*_*lie 51

 SELECT
   M.ModelID, M.Model, C.Content
 FROM
   Models M
 LEFT JOIN
   Models_Content C
     ON C.ContentID = (SELECT MIN(ContentID) FROM Models_Content WHERE ModelID = M.ModelID)
 WHERE
   M.ModelID = 5
Run Code Online (Sandbox Code Playgroud)

要么

;WITH sorted_content AS
(
  SELECT
    ROW_NUMBER() OVER (PARTITION BY ModelID ORDER BY ContentID) AS itemID,
    *
  FROM
    Models_Content
)
 SELECT
   M.ModelID, M.Model, C.Content
 FROM
   Models M
 LEFT JOIN
   sorted_content C
     ON  C.ModelID = M.ModelID
     AND C.itemID  = 1
 WHERE
   M.ModelID = 5
Run Code Online (Sandbox Code Playgroud)


Mar*_*ith 9

肖恩的答案是最好的具体解决方案,但只是添加另一个"通用"解决方案

SELECT M.ModelID,
       M.Model,
       C.Content
FROM   Models M
       OUTER APPLY (SELECT TOP 1 *
                    FROM   Models_Content C
                    WHERE  M.ModelID = C.ModelID
                    ORDER  BY C.ContentID ASC) C
WHERE  M.ModelID = 5  
Run Code Online (Sandbox Code Playgroud)