我有一张表格,其中包含以下文件的人员列表:
persons (id, identity, name, surname)
然后有第二个表格包含以下字段:
identities (id, type)
identities.type字段的值可以是一个人是否是传统治疗者的性取向或从属关系。
我们有第三个表格,其中我们有人物身份偏好,下面是映射:
preferences (id, person_id, identity_id, value)
比如说我认为是异性恋者和传统治疗师,然后第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