mysql - 将属性表作为列和值连接?

标签 mysql sql postgresql join

CREATE TABLE person_properties (
  person_id INT,  
  key TEXT,
  value TEXT,
  PRIMARY KEY (person_id, key)
);

CREATE TABLE persons (
  id SERIAL PRIMARY KEY
);

我已经这样做了:

INSERT INTO persons DEFAULT_VALUES;  -- suppose id is 1
INSERT INTO person_properties (person_id, key, value) VALUES (1, 'age', '30')
INSERT INTO person_properties (person_id, key, value) VALUES (1, 'weight', '20lb')

我想选择以 ageweight 作为列的 person,并使用 person_properties 中的值> (如果不存在则为 NULL)。我怎样才能做到这一点?

最佳答案

SELECT * FROM persons
LEFT OUTER JOIN person_properties p1 ON persons.person_id = p1.person_id AND p1.key = 'age'
LEFT OUTER JOIN person_properties p2 ON persons.person_id = p2.person_id AND p2.key = 'weight'

关于mysql - 将属性表作为列和值连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24848412/

相关文章:

mysql - 将一行值与同一列中的所有其他值进行比较?

node.js - 如何在 sequelize 中存储模型实例上的其他信息?

SQL 服务器 : Transpose Rows to Columns (n:m relationship)

php - SQL查询哪里不同

mysql - 如何按具有空值的表进行分组

sql - 按更近的距离获取 MIN MAX 分组

mysql - 格式化 SQL 表删除 0 并根据年份对它们进行分组

PHP 返回无效的 MySQL 资源

mysql - 为什么我在 View SELECT 查询中收到带有 WHERE 子句的 "Unknown column ' xyz'"?

sql - pgAdmin 4 在查询执行后不显示结果 (postgreSQL)