Mysql 使用join获取特定fk的记录

Mysql 使用join获取特定fk的记录,mysql,sql,database,Mysql,Sql,Database,我有一个ParentsChoolContact表,其中parentId具有parentId的外键: CREATE TABLE ParentsSchoolContact ( contactId int NOT NULL AUTO_INCREMENT, parentId int NOT NULL, name varchar(60) NOT NULL, age varchar(60) NOT NULL, PRIMARY KEY (contactId), FOREIGN KEY

我有一个ParentsChoolContact表,其中parentId具有parentId的外键:

CREATE TABLE ParentsSchoolContact (
  contactId int NOT NULL AUTO_INCREMENT,
  parentId int NOT NULL,
  name varchar(60) NOT NULL,
  age varchar(60) NOT NULL,
  PRIMARY KEY (contactId),
  FOREIGN KEY (parentId) REFERENCES Parent(parentId)
);
我有一个家长和联系人表,用于保存孩子和家长之间的关系:

CREATE TABLE ParentAndContact (
  parentId int NOT NULL,
  contactId int NOT NULL,
  PRIMARY KEY (contactId, parentId)
);
我想获得与我有其id的特定家长相关的所有联系人,这是正确的查询吗

SELECT c.name, c.age
FROM ParentsSchoolContact c 
INNER JOIN ParentAndKid pc ON pc.contactId = c.contactId 
    AND c.parentId = myParentVariable 
    AND pc.parentId = myParentVariable
希望确保此查询在某种情况下不会出现,您可以考虑:)


谢谢

对我来说,我发现ParentAndContact表是多余的。通常,家长详细信息在一个表中,联系人ID/孩子详细信息在另一个表中(具有属性,例如孩子注册的课程,孩子的详细信息)

假设您希望从可用表(ParentsChoolContact、ParentsContact和Contact)中获取与特定父级相关的所有联系人,您可以编写一个简单的查询,从ParentsChoolContact表中检索信息,如下所示:-


如果我遗漏了什么,一定要告诉我

你想包括没有孩子的父母吗?或者没有父母的孩子?你不需要这部分:'k.parentId=myParentVariable AND'。如果你的
myParentVariable
是你的
parentId
,那么你不需要引用
ParentAndKid
,只要使用
其中k.parentId=myParentVariable
@Shawn否,我只选择孩子,所以我只想要一个特定家庭的孩子parent@MNY您的
Kid
表不需要
parentID
,或者您不需要
ParentAndKid
表。我的选择是保留
ParentAndKid
并删除
Kid.parentID
。然后从查询中删除
和pk.parentID=myParentVariable
select contactId, parentId, name, age 
from ParentsSchoolContact
where parentId = myParentVariable