首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多对多关系中的最大值

多对多关系中的最大值
EN

Stack Overflow用户
提问于 2010-07-02 16:54:11
回答 3查看 2K关注 0票数 5

我使用的是SQL Server2008,我有3个表,xyzy的存在是为了在xz之间创建多对多关系。

代码语言:javascript
运行
复制
 x      y      z
--     --     --
id    xid     id
      zid   sort

以上所有字段均为int

我想找出性能最好的方法(不包括去规格化),找到任何zsort最高的x,并返回所有三个表中的所有字段。

示例数据:

代码语言:javascript
运行
复制
x:   id
     --
      1
      2

y:  xid zid
    --- ---
      1   1
      1   2
      1   3
      2   2

z:  id sort
    -- ----
     1    5
     2   10
     3   25

结果集应为

代码语言:javascript
运行
复制
xid zid
--- ---
  1   3
  2   2

请注意,如果存在多个具有相同最高sort值的z,那么我仍然希望每个x只有一行。

还请注意,在我的实际情况中,所有三个表中都有其他字段需要在我的结果集中使用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-02 17:02:16

一种方法是使用子查询。但是,这只适用于获取Z的ID。如果需要来自x和z表的更多/所有列,那么这不是最好的解决方案。

代码语言:javascript
运行
复制
SELECT
    x.id,
    (
        SELECT TOP 1
            z.zid
        FROM
            y
        INNER JOIN
            z
        ON
            z.id = y.zid
        WHERE
            y.xid = x.id
        ORDER BY
            z.sort DESC
    )
FROM
    x

这就是如何执行此操作并返回所有表中的所有数据。

代码语言:javascript
运行
复制
SELECT
    *
FROM
    x
INNER JOIN
    y
ON
    y.xid = x.id
AND
    y.zid =
(
    SELECT TOP 1
        z2.zid
    FROM
        y y2
    INNER JOIN
        z z2
    ON
        z2.id = y2.zid
    WHERE
        y2.xid = x.id
    ORDER BY
        z2.sort DESC
)
INNER JOIN
    z
ON
    z.id = y.zid
票数 0
EN

Stack Overflow用户

发布于 2010-07-02 16:58:33

代码语言:javascript
运行
复制
select xid,max(zid) as zid from y
group by xid
票数 0
EN

Stack Overflow用户

发布于 2010-07-02 17:34:55

代码语言:javascript
运行
复制
select xid, zid /* columns from x; and columns from y or z taken from q */
from (select y.xid, y.zid, /* columns from y or z */
             row_number() over(partition by y.xid order by z.sort desc) r
      from y
           join z on z.id = y.zid
     ) q
     join x on x.id = q.xid
where r = 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3164328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档