这种情况:

  • MySQL5.0
  • 表2
  • 1-对-很多的父子外键关系(A ID=B PARENT_ID)

有什么需要:

  • 一个选择的查询的收益设置的所有Nth儿童(根据他们的IDs)
  • 还需要一个形式的使用更新

例如:

表B

| ID | PARENT_ID |
------------------
|  1 |     1     |
|  2 |     1     |
|  3 |     1     |
|  4 |     2     |
|  5 |     2     |
|  6 |     2     |
|  7 |     2     |
|  8 |     3     |
|  9 |     3     |
| 10 |     4     |

所希望的结果设定,例如,所有第2孩子

| A.ID | B.ID | B.PARENT_ID |
-----------------------------
|    1 |    2 |           1 |
|    2 |    5 |           2 |
|    3 |    9 |           3 |

也许事情做一个要素的组由,我没有看到?

我的心已经完全成为卡看到这个问题的解决办法在程序上.所有帮助非常赞赏。

有帮助吗?

解决方案

不是正确的-MySQL没有排的功能。但幸运的是,它不会允许你来初始化和参考可变的,所以你可以代码的逻辑,用于进行排名。

这将返回该行为的第2次儿童:

SELECT x.aid,
       x.bid,
       x.parent_id
  FROM (SELECT a.id 'aid',
               b.id 'bid',
               b.parent_id,
               CASE WHEN b.parent_id = @parent_id THEN @rownum := @rownum +1 ELSE @rownum := 1 END AS rownum,
               @parent_id := b.parent_id
          FROM TABLE_A a
          JOIN TABLE_B b ON b.parent_id = a.id
          JOIN (SELECT @rownum := 0, @parent_id := NULL) r
      ORDER BY b.parent_id, b.id) x
 WHERE x.rownum = 2

改变的 WHERE x.rownum = ? 为什么Nth级别的孩子你想要的。的 ORDER BY 在子查询是重要的,以确保排出来了正常。

这我不清楚你怎么想到使用这一个 UPDATE 查询提供更多的细节,我会更新以满足你的需求。

其他提示

MySQL没有一个机制来做到这Nth关系。Oracle具有一个延伸,也许其他人。

什么语境?

如果你正在建设一个HTML格式进行更新,产生的数据与用于环和放的身份在表中为简单的更新后提交。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top