Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL继承,按ID获取

SQL继承,按ID获取
EN

Stack Overflow用户
提问于 2016-05-28 13:05:37
回答 1查看 1.1K关注 0票数 1

这个问题的目的是得到最干净和“最好”的方式来处理这类问题。

我读过许多关于如何在SQL中处理继承的问题,并且最喜欢Table Per Type模型,并希望使用它。这方面的问题是,您必须知道要查询什么类型才能执行正确的连接。

假设我们有三个表:SonDaughterChild

例如,如果您想要查询所有的女儿,这是非常有效的。你可以加入孩子的行列,得到所有的信息。

我要做的是按ID查询Child并获取相关的子类信息。我可以做的是向子元素添加一个列Type,并使用第二个select来选择相关的数据,但这似乎不太好。另一种方法是加入所有的子表,但这似乎也不太好。

是否有一个继承模型来解决这类问题,以一种干净、良好和表现良好的方式?

我用的是MySQL

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-28 14:38:12

给出了用例注释中的详细定义

服务器获取http请求domain.com/随机The。

显然,您手头有一个ID,您希望检索派生实体的属性。对于您的情况,我建议使用左联接方法:

代码语言:javascript
运行
AI代码解释
复制
SELECT age, 
  son.id is not null as isSon,
  randomColumn,
  daughter is not null as isDaughter,
  whatEver

FROM child
  LEFT JOIN son on child.id = son.id
  LETT JOIN daughter on child.id = daughter.id

WHERE
  child.id = @yourRandomId

这种方法,BTW,非常接近您当前的数据库设计,因此您不需要进行太多的更改。然而,您可以从改进的数据模型提供的存储节省中获益。

除此之外,我看不出有多少不同的机会:

  • 具有不同数据类型的不同列(尤指p)。如果看一下您的用例),所以不可能通过合并一些列来减少列的数量。
  • 引入type属性在您的问题中已经被拒绝;发送单个SELECT语句也是如此。

在评论中,您表示您正在寻找类似于Map<ID, Child> In MySQL的内容。请注意,这个java‘is表达式是一个编译时表达式,它在运行时使用相应的实例类型实例化。SQL不知道运行时和编译时之间的区别。因此,也没有必要使用这样一个通用表达式。最后,还请注意,对于您的Java程序,您还需要分析(通过反省或使用instanceof)您的value实例有哪些类型--这也是您需要执行的“单记录”活动。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37503730

复制
相关文章
getIdentifier获取资源id
首先我想到的是反射,但是经过实验发现提示报错no emoty constructor。
提莫队长
2019/02/21
4.1K0
通过 MongoTemplate 按ID或其他字段删除
翟凤玺
2023/10/19
6600
sql按顺序去重
参考博客: https://blog.csdn.net/qtvb1987/article/details/42081585
周杰伦本人
2022/10/25
8930
sql按顺序去重
mybatis获取update的id
平常我门都是更新数据,用更新的条件再查询一次,得到更新的记录。这样我门就进行了两次数据库操作,链接了两次数据库。增加了接口的处理事件,因为链接数据库是很耗时的操作。
似水的流年
2018/01/25
9.4K0
mybatis获取update的id
平常我门都是更新数据,用更新的条件再查询一次,得到更新的记录。这样我门就进行了两次数据库操作,链接了两次数据库。增加了接口的处理事件,因为链接数据库是很耗时的操作。 其实可以通过 mybatis 的 selectKey 标签来解决这个问题。  selectKey 这个标签大家基本上都用过,比如在插入数据的时候,返回插入数据的纪录。如: <selectKey resultType="int" order="AFTER" keyProperty="id"> SELECT
似水的流年
2018/03/28
3.9K0
sqlite 获取最后插入id
SQLite数据库中的表均有一个特殊的rowid字段,它是一个不重复的64位有符号整数,默认起始值为1。rowid别名为oid或_rowid_,但在创建表的SQL声明语句中只能使用rowid作为关键字。如果在创建表的时候设置了类型为integer的具有自动增长性的主键,那么这时的主键相当于是rowid的别名。
随心助手
2020/06/09
6.3K0
mybatis获取update的id
平常我门都是更新数据,用更新的条件再查询一次,得到更新的记录。这样我门就进行了两次数据库操作,链接了两次数据库。增加了接口的处理事件,因为链接数据库是很耗时的操作。
似水的流年
2019/12/06
3.5K0
使用 MongoRepository 按ID以外字段进行删除操作
根据除 _id 以外的字段进行删除,可以使用自定义的查询方法来实现。可以在自定义的查询方法中使用 MongoDB 的查询语法来指定删除条件,从而根据其他字段进行删除。
翟凤玺
2023/10/19
4150
SQL根据指定节点ID获取所有父级节点和子级节点
根据指定节点ID获取所有父节点 with temp as( select * from dbo.Category where Id=493 --表的主键ID union all select t.* from temp,dbo.Category t where temp.Pid=t.Id --父级ID=子级ID )select * from temp order by Level; [查询结果] 根据指定节点ID获取所有子节点 with temp as( select * from dbo.Category
段邵华
2019/08/01
6.1K0
pgsql 通过 序列 批量获取ID
CREATE OR REPLACE FUNCTION getNextIds (VARCHAR,INTEGER) RETURNS VARCHAR AS $body$ DECLARE str VARCHAR ; DECLARE nextid VARCHAR ; BEGIN str = ''; FOR i in 1..$2 loop nextid = (SELECT NEXTVAL($1)); str = str || nextid || ';' ; EN
qubianzhong
2018/08/08
4K0
Python 进程,获取进程id( o
import os pid=os.fork() #fork反复拷贝 if pid==0: print("A",os.getpid(),os.getppid()) else: print("B",os.getpid(),os.getppid()) # os.getpid()获取当前进程id os.getppid()获取父进程id
py3study
2020/01/10
4.6K0
职教云教师ID获取教程
首先呢,因为这个教师ID在多个地方都有出现,但是每个老师的活动情况都不一样,所以也就没有写到软件里了(好吧,我就是懒)。然后修改作业时间呀,作业分数呀都需要用到这个ID,所以这里写一下获取教程。
SingYi
2022/07/14
3.9K0
职教云教师ID获取教程
Android 动态获取资源的ID
但是对于以上做法, 官方并不推荐,并且 getIdentifier这个写library的时候, 如果里面需要引用主程的资源且R所在的包名未知时还是很有用的(如果在gradle里修改了packageName, R所在的包名是和packageName不一样的,没法反射),当然也是有解决的办法: 如果愿意,是可以根据业务拼接出 “package_name.R.drawable.class” 的。但是如果这样的话,视具体情况一定有更好的解法。
胖虎哥
2023/05/10
2.6K0
go语言获取协程id
package main import (    "bytes"    "fmt"    "runtime"    "strconv"    "time" ) func main() {    go func() {       gid := GetGid()       fmt.Printf("child goruntine1 gid:%v \n",gid)    }()    go func() {       gid := GetGid()       fmt.Printf("child goru
仙士可
2022/03/28
3K0
cannot fetch plan for SQL_ID
  SQL tuning过程中离不开分析SQL语句的执行计划。在一次提取执行计划的时候碰到cannot fetch plan for SQL_ID的错误提示。根据错误 提示来看需要检查SQL的子游标或该执行计划不在v$sql_plan表中,而这种情况一般不存在。因为刚刚执行过的SQL语句不可能这么快从v$sql_plan 移除。下面给出错误描述及处理办法。
Leshami
2018/08/14
6190
php 获取连续id,WordPress文章ID连续及ID重新排列的方法
解决Wordpress 文章 ID连续问题,同时让Wordpress 文章 ID重新排列。在用以下方法前,先备份好网站文件和数据库文件,以免操作不当造成损失。哈哈哈
超级小可爱
2023/02/20
9.4K0
Mybatis获取自增长的主键id
这个问题主要是今天项目中新加的一个需求导致的,主要过程是这样的,因为每个项目里面用户,角色,权限这三者是密不可分的,在数据库中就可以通过下面这张图来表达他们三者之间的关系:
萌萌哒的瓤瓤
2021/01/13
3.5K0
Mybatis获取自增长的主键id
MyBatis批量插入获取自增ID
MyBatis3.3.1或者MyBatis3.4.X(自测使用3.4.6) ModuleMapper.xml
十毛
2019/03/27
4.5K0
Android根据资源名获取资源ID
接触过Android开发的同学们都知道在Android中访问程序资源基本都是通过资源ID来访问。这样开发起来很简单,并且可以不去考虑各种分辨率,语言等不同资源显式指定。
技术小黑屋
2018/09/04
3.6K0
通过Windows进程ID获取窗口句柄
通过以上两种窗口获得的句柄,和使用FindWindow获得的句柄是一样的。 可以通过SendMessage向窗口发送消息
全栈程序员站长
2022/09/16
3.5K0

相似问题

SQL -按id计数

35

SQL按情况排序+按ID排序

10

SQL按ID获取一列中的差异

11

SQL Server按每个ID获取不同的名称计数

430

按ID获取项目

110
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档