`
yangle926
  • 浏览: 56688 次
  • 性别: Icon_minigender_1
  • 来自: 洛阳
社区版块
存档分类
最新评论

如何给同一表的两个外键写SQL查询

    博客分类:
  • SQL
阅读更多
  问:当以其中的一个表有两个外键指向另一个表的主键时,我们怎样从两个表中检索数据?例如,表A有两个列,Parent_ID和Child_ID。表B有两个列,ID和名字。我们怎样检索数据并让这些数据按照Parent_ID、Parent_Name、Child_ID和Child_Name显示。
  答:只要将这个表连结两次。完成之后,你就必须使用表别名:
SELECT a.Parent_ID,bp.Name AS Parent_Name,a.Child_ID,bc.Name AS Child_Name
 FROM TableA AS a INNER JOIN TableB AS bp ON bp.ID = a.Parent_ID INNER JOIN TableB AS bc ON bc.ID = a.Child_ID
 
  注意在这一查询中TableB会出现两次。这就是说我们在它每次出现时都必须使用别名,而且要用SELECT语句、用合适的别名限定这些列。由于TableB两个实例中的列有相同的名称,即这一名称是共有的但不是必需的——所以我们要用SELECT语句对表别名复值。
分享到:
评论

相关推荐

    MySQL数据库面试题.pdf

    以下是针对MySQL数据库的60个面试题,涵盖了数据库设计、SQL查询、性能优化、复制、安全等多个方面: ### 数据库设计及SQL基础 1. 什么是数据库规范化,...18. 如何用SQL更新同一表内的两个列的值? 19. 解释如何使用

    SQL性能优化

     以上两个SQL中dy_dj(电压等级)及xh_bz(销户标志)两个字段都没进行索引,所以执行的时候都是全表扫描,第一条SQL的dy_dj = '1KV以下'条件在记录集内比率为99%,而xh_bz=1的比率只为0.5%,在进行第一条SQL的...

    2009达内SQL学习笔记

    多表查询时,可给表起别名。(给列起别名,列<空格>列别名;给表起别名,表<空格>表别名;)。 如:Select first_name EMPLOYEES, 12*(salary+100) AS MONEY, manager_id "ID1" From s_emp E; 4、字段的拼接,可用双...

    图书管理系统

    1) 给每个表实施主键及外键约束。 2) 设定缺省约束。如性别。 3) 设置非空约束如图书信息表中的书名。 4) 实施CHECK约束。如ISBN类别表中的可借数量小于馆藏数量。 5) 实施规则。如身份证号码必须为15为或...

    SQL数据库设计.doc

    SQL Server 数据库设计 一、数据库设计的必要性 在实际的软件项目中,如果系统中需要存储的数据量比较大,需要设计的表比较多,表 与表之间的关系比较复杂,那我们就需要进行规范的数据库设置。如果不经过数据库的 ...

    《数据库原理与应用》复习.doc

    13. 关于关系模式 R(U)、候选键 k、主键 p:R(U)的任何一个关系实例的任意两个元组在属性集合 k 上的值都不相同;k 的任何真子集都不满足条件;pk;在一个关系模式中,主键 p 只有一个,而候选键 k 可有多个,因此...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     EXP_FULL_DATABASE, IMP_FULL_DATABASE这两个角色用于数据导入导出工具的使用。  自定义角色 Oracle建议我们自定义自己的角色,使我们更加灵活方便去管理用户  创建角色 SQL> create role admin;  授权给...

    。net图书管理系统设计方案

    数据库设计有几个范式,一般我们要做到的是第三范式,即数据表中没有冗余字段以及同一个表中的字段没有函数依赖关系,冗余字段即在一个表中已经保存过的信息,在另一个表中就不应该存在,如果需要的话,可以通过表间...

    jpivot学习总结.doc

    uniqueMembers 该属性用于优化产生的 SQL ,如果你知道这个级别和其父级别交叉后的值或者是维度表中给定的级别所有的值是唯一的,那么就可以设置该值为 true ,否则为 false 。 levelType 该 Level 的类型,默认...

Global site tag (gtag.js) - Google Analytics