簡體   English   中英

將屬性表聯接為列和值?

[英]Joining a table of properties as columns and values?

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')

我想選擇person s的ageweight為列,從值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'

您的架構是錯誤的。

key是保留鍵,並且唯一表中不能有2個主鍵。

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

CREATE TABLE persons (
  id SERIAL PRIMARY KEY
);

您不能擁有兩次相同的主鍵...

INSERT INTO person_properties (person_id, cle, value) VALUES (**1**, 'age', '30');
INSERT INTO person_properties (person_id, cle, value) VALUES (**1**, 'weight', '20lb');

如果必須有兩行具有相同的鍵,那就不好了。

我建議您重做//重新考慮您的架構。

編輯:

CREATE TABLE person_properties (
  person_id INT NOT NULL AUTO_INCREMENT,  
  pkey VARCHAR(10),
  value TEXT,
  PRIMARY KEY (person_id, pkey)
);

CREATE TABLE persons (
  id SERIAL PRIMARY KEY
);

INSERT INTO person_properties (pkey, value) VALUES ('age', '30');
INSERT INTO person_properties (pkey, value) VALUES ('weight', '20lb');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM