从通用表和专用表生成选择查询

Posted

技术标签:

【中文标题】从通用表和专用表生成选择查询【英文标题】:Generating a select query from a generalized and specialized tables 【发布时间】:2021-03-23 18:34:26 【问题描述】:

所以我有一个名为 beneficiaries 的通用表,它给出了专用表 parent 和 child。因此,父子表引用了受益人 ID。但是,子表引用了父受益人 ID。现在我的难题是我想编写一个查询,该查询返回受益人的孩子姓名和受益人的父母姓名,同时显示孩子属于哪个父母。我写了这个查询:

select * from beneficiaries
inner join child on beneficiaries.bene_id = child.ParentBene_id
inner join parent on beneficiaries.bene_id = parent.parentBene_id;

但我得到的结果只是孩子的父母姓名和 id。 表结构

Beneficiaries table

Child Table

Parent Table

【问题讨论】:

【参考方案1】:

您的查询看起来很棒。我用示例数据创建了一些表格,这是我的结果。

也许您在创建表时忘记声明外键? 这是我用来在 mysql 中创建表的命令:

受益人表:
CREATE TABLE `beneficiaries` (
  `bene_id` int(11) NOT NULL,
  `kayacare_id` int(11) DEFAULT NULL,
  `fname` tinytext,
  `mname` tinytext,
  `lname` tinytext,
  `location` tinytext,
  `dob` tinytext,
  `sex` varchar(1) DEFAULT NULL,
  PRIMARY KEY (`bene_id`)
)
子表:
CREATE TABLE `child` (
  `bene_id` int(11) DEFAULT NULL,
  `parentBene_id` int(11) DEFAULT NULL,
  `healthWorker_id` int(11) DEFAULT NULL,
  `careGiver_id` int(11) DEFAULT NULL,
  KEY `parentBene_id` (`parentBene_id`),
  FOREIGN KEY (parentBene_id) REFERENCES beneficiaries(bene_id)
  )
父母表:
CREATE TABLE `parent` (
  `parentBene_id` int(11) DEFAULT NULL,
  `phone` int(11) DEFAULT NULL,
  KEY `parentBene_id` (`parentBene_id`),
  FOREIGN KEY (parentBene_id) REFERENCES beneficiaries(bene_id)
)

Here你可以看到如何在 MySQL 中编辑外键。

【讨论】:

是的,所以我希望父母姓名也显示在查询结果中,以便我们可以一起识别孩子和父母 如果您只想要名称或将其作为结果中的第一个值,您可以这样问:select fname, lname, mname from beneficiaries inner join child on beneficiaries.bene_id = child.ParentBene_id inner join parent on beneficiaries.bene_id = parent.parentBene_id; 我假设这是父名称,如果您正在寻找孩子名称,您的表中没有类似的字段。【参考方案2】:

为了得到我想要的结果,我使用了这个查询:

select * from child
right join beneficiaries on child.bene_id = beneficiaries.bene_id  
inner join (select parentBene_id,fname as pfname, mname as pmname, lname as plname, phone from 
parent inner join beneficiaries on parent.parentBene_id = beneficiaries.bene_id) 
parent on child.parentBene_id = parent.parentBene_id;

【讨论】:

以上是关于从通用表和专用表生成选择查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL通用优化方案(where优化索引优化分页优化事务优化临时表优化)

javaweb代码生成器,专注于javaweb项通用目的代码生成器

ABAP表抛FTP通用程序

从多个表和查询中导入事实表数据

通用Mapper

CSS