从通用表和专用表生成选择查询
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优化索引优化分页优化事务优化临时表优化)