【问题标题】: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

【问题讨论】:

    标签: php mysql mysql-workbench


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      • 1970-01-01
      • 2021-04-27
      • 1970-01-01
      • 2018-10-28
      • 2015-04-19
      相关资源
      最近更新 更多