Sql 使用内部联接为每个id返回一行

Sql 使用内部联接为每个id返回一行,sql,select,join,sql-server-2008-r2,distinct,Sql,Select,Join,Sql Server 2008 R2,Distinct,在SQL Server数据库中,我有两个表,一个是另一个的父表。子表与父表具有多对一关系。我只需要为每个父表返回一条记录,其中包含最上面对应的子表记录。然而,我不知道如何做到这一点 以下是我现在的疑问: SELECT DISTINCT products.id, sku, name, mediaid FROM products INNER JOIN productmedia ON products.id = productmedia.product

在SQL Server数据库中,我有两个表,一个是另一个的父表。子表与父表具有多对一关系。我只需要为每个父表返回一条记录,其中包含最上面对应的子表记录。然而,我不知道如何做到这一点

以下是我现在的疑问:

SELECT DISTINCT
    products.id,
    sku,
    name,
    mediaid
FROM
    products
INNER JOIN 
    productmedia ON products.id = productmedia.productid
WHERE
    sku IN ('HCFL 207 23 (A)','HCFL 207 22 (A)','HCFL 207 21 (A)','HCFL 207 20 (A)')
    AND productmedia.sort = 100 
我得到以下信息:

183816  HCFL 207 20 (A) HCFL SERIES- 2-BOLT FLANGE, ECCENTRIC LOCKING COLLAR, BORE DIA. 1 1/4", WIDE INNER RACE INSERT -ASIAN   2929082
183816  HCFL 207 20 (A) HCFL SERIES- 2-BOLT FLANGE, ECCENTRIC LOCKING COLLAR, BORE DIA. 1 1/4", WIDE INNER RACE INSERT -ASIAN   2929083
183817  HCFL 207 21 (A) HCFL SERIES-2-BOLT FLANGE, ECCENTRIC LOCKING COLLAR, BORE DIA. 1 5/16", WIDE INNER RACE INSERT-ASIAN    2929138
183817  HCFL 207 21 (A) HCFL SERIES-2-BOLT FLANGE, ECCENTRIC LOCKING COLLAR, BORE DIA. 1 5/16", WIDE INNER RACE INSERT-ASIAN    2929139
183818  HCFL 207 22 (A) HCFL SERIES- 2-BOLT FLANGE, ECCENTRIC LOCKING COLLAR, BORE DIA. 1 3/8", WIDE INNER RACE INSERT -ASIAN   2929086
183818  HCFL 207 22 (A) HCFL SERIES- 2-BOLT FLANGE, ECCENTRIC LOCKING COLLAR, BORE DIA. 1 3/8", WIDE INNER RACE INSERT -ASIAN   2929087
183819  HCFL 207 23 (A) HCFL SERIES- 2-BOLT FLANGE, ECCENTRIC LOCKING COLLAR, BORE DIA. 1 7/16", WIDE INNER RACE INSERT -ASIAN  2929084
183819  HCFL 207 23 (A) HCFL SERIES- 2-BOLT FLANGE, ECCENTRIC LOCKING COLLAR, BORE DIA. 1 7/16", WIDE INNER RACE INSERT -ASIAN  2929085
您可以按s.id将顺序更改为您认为是根据其排序结果的任何其他列。

交叉应用是您的朋友:

SELECT DISTINCT
    products.id,
    sku,
    name,
    mediaid
FROM
    products
    CROSS APPLY (
        SELECT TOP(1)
            * -- List the required columns!
        FROM
            productmedia
        WHERE           
            products.id = productmedia.productid
            AND productmedia.sort = 100 
        ORDER BY
            YourOrderColumn -- Change it to your required order!
    ) AS X
WHERE
    sku IN ('HCFL 207 23 (A)','HCFL 207 22 (A)','HCFL 207 21 (A)','HCFL 207 20 (A)')

最顶层子级的定义是什么?您使用哪种RDBMS?向我们展示父表和子表的表结构…您使用哪种数据库服务器和版本?在不同的数据库引擎中可能有不同的解决方案。请显示预期的输出。这是SQL数据库版本2008 R2。如果您希望在输出结果中包含该列,则应将其添加到botch Select中。如果不想显示它,可以从两个选择中跳过它。我们无法猜测哪些列来自哪个表,因为您没有提到表结构,而且您的查询也不清楚。提示:如果在查询中使用两个或多个表,请为它们添加别名,并始终在列名中包含该别名。
SELECT DISTINCT
    products.id,
    sku,
    name,
    mediaid
FROM
    products
    CROSS APPLY (
        SELECT TOP(1)
            * -- List the required columns!
        FROM
            productmedia
        WHERE           
            products.id = productmedia.productid
            AND productmedia.sort = 100 
        ORDER BY
            YourOrderColumn -- Change it to your required order!
    ) AS X
WHERE
    sku IN ('HCFL 207 23 (A)','HCFL 207 22 (A)','HCFL 207 21 (A)','HCFL 207 20 (A)')