MYSQL查询根据查询结果从同一个表中的2条不同记录中提取数据

标签 mysql join mapping modeling relationships

有关上下文,请查看此处:

Database Model to Represent Families, Households, and Relationships

基本上,我试图映射人和家庭之间的关系,而不是将关系和家庭与单个“户主”联系起来。到目前为止,我认为我的模型效果很好。这是有效的:

SELECT person.person_id,person.first_name, relationship.person_id_a, relationship.person_id_b, relationship.relationship_cd
FROM person, relationship
WHERE person_id = 1
AND (person.person_id = relationship.person_id_a
OR person.person_id = relationship.person_id_b)
AND relationship.relationship_cd <> 0;

结果:

"person_id" "first_name" "person_id_a" "person_id_b" "relationship_cd"
"1" "Joe"   "1" "2" "8 - Spouse"
"1" "Joe"   "1" "3" "7 - Sibling"

所以我知道乔(人 1)有一个配偶(人 2)和一个 sibling (人 3)。有没有办法让我将与 Joe 有关系的人的姓名(或其他信息)附加到输出中?也就是说,查询 1 告诉我 Joe 与谁有关系(通过与关系表的联接),我是否可以以这样的方式嵌套另一个查询,以便我可以提取该人的姓名(从联接返回到另一条记录)人员表)?所以它看起来像这样:

"person_id" "first_name" "person_id_b" "relationship_cd" "related_person_name"
"1" "Joe" "2" "8 - Spouse" "Susan"
"1" "Joe" "3" "7 - Sibling" "Bob"

最佳答案

我会从 relationship 中进行选择,其中 person_id_a 或 person_id_b 等于您的人员 (Joe) 的 ID,然后为 relationship 中的 a 和 b 人员加入两次 person 。例如:

SELECT 
r.person_id_a, 
a.first_name as first_name_a,
r.person_id_b,
b.first_name as first_name_b
r.relationship_cd 
FROM relationship r
JOIN person a on a.person_id = r.person_id_a
JOIN person b on b.person_id = r.person_id_b
WHERE r.person_id_a = 1
OR r.person_id_b = 1 
AND relationship.relationship_cd <> 0;

此查询将返回 person_id = 1 且名字为 person_a 和 person_b 的人员的所有关系。

如果您想以答案中的形式获得结果,查询可能如下所示:

    SELECT 
        p.person_id,
        case when p.person_id = r.person_id_a then a.first_name else b.first_name end as first_name,
        case when p.person_id = r.person_id_a then b.person_id else a.person_id end as person_id_related,
        case when p.person_id = r.person_id_a then b.first_name else a.first_name end as first_name_related,
        r.relationship_cd 
FROM person p
JOIN relationship r ON r.person_id_a = p.person_id OR r.person_id_b = p.person_id
JOIN person a on a.person_id = r.person_id_a
JOIN person b on b.person_id = r.person_id_b
WHERE p.person_id = 1 
        AND relationship.relationship_cd <> 0;

关于MYSQL查询根据查询结果从同一个表中的2条不同记录中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30130533/

相关文章:

sql - SQL `order` .id 未知列中的变量范围

python - 通过多次连接自身表来创建新列

mysql - SQL 连接难题

mysql - 大量大型矩阵数据的mysql数据库设计

mysql - 将 MySQL group by date 和 select count 查询转换为 Laravel Eloquent

SQL查询汇总不同表中的字段

spring-mvc - Controller 扩展接口(interface)时无法识别带注释的 Spring-MVC Controller

java - Mapstruct:仅针对集合映射忽略特定字段

c - 特定有限整数集的高效映射

mysql - 您的 SQL 语法在“:table_templates_boxes_to_pages”附近有错误