假设
A 表字段:id, name, update_time
B 表字段:id, aid, content, update_time
其中,B 表的 aid 对应 A 表的 id,且会有多条 aid 相同,即 A 表的一条数据对应 B 表多条数据。
在查询 A 表的时候 select * from A
,同时要关联读取 B 表中一条对应 aid 的 content 字段,这一条数据可能是根据更新时间倒序的最后一条。
总之,最后想要的查询结果含有 A.* B.content
这种需求怎么实现比较合理?
1
eason1874 2019-10-11 18:12:24 +08:00
直接参考 WordPress 分类关系表设计
|
2
aragakiyuii 2019-10-11 18:15:32 +08:00 via Android
select a.*, b.content from A a, (select aid, content, row_number() over (order by update_time desc partition by aid ) as rn from B where rn = 1) b where a.id = b.aid
oracle 没测试过,如果想要 A 表全部记录得左连接 |
3
ipiao 2019-10-11 18:16:39 +08:00
建议写 2 条 sql,拒绝 join
|
4
Doldrums 2019-10-11 18:17:59 +08:00
对 B 表 ROW_NUMBER() over(partition...)排序之后 leftjoin 限制 B.rowNum=1
|
5
bumz 2019-10-11 19:06:00 +08:00 via iPhone
|
7
QiuSe 2019-10-11 20:09:57 +08:00
|
8
Caballarii 2019-10-11 20:13:56 +08:00
建议分开写 sql,多不了几条,A 表多了就分页查
|
9
wangyzj 2019-10-11 20:14:34 +08:00
content 不应该是属于 a 表才对么
|
11
zjsxwc 2019-10-12 07:04:34 +08:00 via Android
两次 sql 呗
|