MySQL从两个或多个结果集创建一行

时间:2016-04-19 11:54:20

标签: mysql

我有一张表格,其中包含以下文件的人员列表:

persons (id, identity, name, surname)

然后有第二个表格包含以下字段:

identities (id, type)

identities.type字段的值可以是一个人是否是传统治疗者的性取向或从属关系。

我们有第三个表格,其中我们有人物身份偏好,下面是映射:

preferences (id, person_id, identity_id, value)

比如说我认为是异性恋者和传统治疗师,然后第2个人认为只是同性恋者。

以下是上述情景的表示:

enter image description here

如果我想消除第二行并为第一行中的第一个用户添加第二个值字段,是否可以?

2 个答案:

答案 0 :(得分:1)

如果没有看到表格,有点困难,但这是我根据你的描述猜测的。这是否朝着正确的方向发展?

SELECT 
p.id, p.name, p.surname, pref.id, pref.person_id,
CASE WHEN i.type = 'sexuality' THEN p.value ELSE NULL END AS sexuality,
CASE WHEN i.type = 'affiliation' THEN p.value ELSE NULL END AS affiliation
FROM persons p
JOIN preferences pref ON p.id = pref.person_id
JOIN identities i ON i.id = pref.identity_id

答案 1 :(得分:0)

在人员和身份表中,您只需插入一次每条记录。但是在首选项表中,您可以插入前两个表的任意组合多少次。您必须编写带有连接的select语句来显示如图所示的表:

SELECT * FROM preferences p
INNER JOIN persons u on u.id = p.person_id
INNER JOIN identities i on i.id = p.identity_id