Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用单人表存储和显示相关的家庭成员_Mysql_Join_Relationship_Create Table - Fatal编程技术网

Mysql 使用单人表存储和显示相关的家庭成员

Mysql 使用单人表存储和显示相关的家庭成员,mysql,join,relationship,create-table,Mysql,Join,Relationship,Create Table,我想创建一个查询,使用下表返回父级及其监护人。我的问题是,如何使用person表中的name属性两次返回医务人员的姓名和家长的姓名。任何示例代码都将不胜感激,谢谢。我知道我没有解释清楚,但是如果有人理解我的意思,请随意编辑上面的内容。更具体地说,我只想使用person表来存储有关家长及其子女的信息,并使用display来显示每个相关人员的姓名。我怎样才能用一张桌子做到这一点 使用提供的一些建议,我能够创建查询,但由于我的表有问题,它无法工作。我使用以下表格: CREATE TABLE Pers

我想创建一个查询,使用下表返回父级及其监护人。我的问题是,如何使用person表中的name属性两次返回医务人员的姓名和家长的姓名。任何示例代码都将不胜感激,谢谢。我知道我没有解释清楚,但是如果有人理解我的意思,请随意编辑上面的内容。更具体地说,我只想使用person表来存储有关家长及其子女的信息,并使用display来显示每个相关人员的姓名。我怎样才能用一张桌子做到这一点

使用提供的一些建议,我能够创建查询,但由于我的表有问题,它无法工作。我使用以下表格:

CREATE TABLE Person
(
personID INT NOT NULL,
name VARCHAR(50),
address VARCHAR(70),
phone VARCHAR(15),
email VARCHAR(30),
year INT,
PRIMARY KEY (personID)
);

CREATE TABLE Guardian
(
parentID INT NOT NULL,
childID INT NOT NULL,
PRIMARY KEY (parentID, childID)
FOREIGN KEY (parentID) REFERENCES (personID),
FOREIGN KEY (childID) REFERENCES (personID)
);

我应该在哪里使用什么语句才能使其正常工作。我认为问题在于两个外键语句都引用person表中的同一个键。在查找父项和子项时,如何引用相同的属性而不出现任何错误。

您没有提到,但是假设一个人只能有一个监护人,我认为您不需要两个表

只需在映射到自身的Person表上添加guardianID。你会有这样的东西吗

Person
ID   name        GuardianID
1    The Father     null
2    The Son         1
所以,如果你想了解一个人及其监护人,你可以这样做

select *, (select p2.name from person wherep2.id=p.guardianid)
from person p
where p.id=2

首先修复您的创建表:

CREATE TABLE Guardian
(
parentID INT NOT NULL,
childID INT NOT NULL,
PRIMARY KEY (parentID, childID),
FOREIGN KEY (parentID) REFERENCES Person(personID),
FOREIGN KEY (childID) REFERENCES Person(personID)
);
然后查询:

SELECT
  p.name as parentName,
  c.name as childName,
  Guardian.*
FROM Person AS p
  INNER JOIN Guardian ON p.PersonID=Guardian.parentID
  INNER JOIN Person AS c ON c.PersonID=Guardian.childID
WHERE
  -- whatever you want, e.g.
  p.Name='John'
这将为每个父/子对返回一行


重要的特性是引用Person表两次,但在每种情况下为其指定不同的别名。然后,您可以在两个不同的角色中引用该表。输出列也可以设置别名,以区分连接表的两个实例中的同一列。

@Bridge guest是一个复制错误,过去的错误,感谢您指出,修复了它!它仍然给我错误rugby1\u Guardian’在它应该工作的时候不存在,因为所有create table语句都已正确发布
rugby1\u Guardian
不在其中。。。你是说橄榄球卫报吗。如果该表存在,请使用
DESC Guardian
检查。否,该表不存在,因为带有CREATE table GARDIARD的外键语句出于某种原因正在停止正在创建的表窗体。我知道这一点,因为当我注释出表时,表被成功创建。这就是为什么我修复了
createtable
语句-我的版本应该可以工作!
SELECT
    Child.name AS ChildName,
    Parent.name AS ParentName
FROM Guardian
    INNER JOIN Person AS Child ON Child.personID = Guardian.childID
    INNER JOIN Person AS Parent ON Parent.personID = Guardian.parentID