题
这种情况:
- 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格式进行更新,产生的数据与用于环和放的身份在表中为简单的更新后提交。
不隶属于 StackOverflow