我有一个材料数据库,它被分成两个表,A和B,每个表都包含材料的名称,属性和属性的引用。每种材料都可以有多个属性,因此可以有多个参考然后,我将两个表连接到材料的名称上,从而生成一个表格,每个材料都有一行(以及每个属性的列)。
问题是我想将给定材料的所有引用合并到一个非重复的列表中。现在,我有一个列,其中包含来自表A的材料的所有引用的group_concat(distinct)
列和一个包含表B中的材料的所有引用的列。我可以自然地手动连接它们references_A || ", " || references_B
但不是摆脱重复。
下面是一个最小的例子,创建第一个表:
CREATE TABLE "attributes" (
"name",
"attribute",
"value",
"reference"
);
INSERT INTO "attributes" VALUES ('DAY', 'Si/Al ratio', '∞', 'XYZ');
INSERT INTO "attributes" VALUES ('NaY', 'Si/Al ratio', '2.4', 'XYZ');
创建第二个表:
CREATE TABLE "properties" (
"name",
"Tmp",
"property",
"value",
"reference"
);
INSERT INTO "properties" VALUES ('DAY', 300, 'capacity', 5.36, 'XYZ');
INSERT INTO "properties" VALUES ('DAY', 320, 'capacity', 7.44, 'XYZ');
INSERT INTO "properties" VALUES ('NaY', 300, 'capacity', 6.8, 'ABC');
INSERT INTO "properties" VALUES ('NaY', 300, 'capacity', 9.4, 'ABC');
创建组合视图:
CREATE VIEW base AS SELECT
at.name,
pr.Tmp,
max(case when at.attribute = 'Si/Al ratio' then at.value end) `SiAl`,
avg(case when pr.property = 'capacity' then pr.value end) `capacity`,
group_concat(distinct pr.reference) `reference_pr`,
group_concat(distinct at.reference) `reference_at`
FROM attributes at
LEFT JOIN properties pr ON
at.name = pr.name
GROUP BY at.name, pr.Tmp
至于为什么我从两个表开始,请参阅我之前的问题: https://stackoverflow.com/questions/8835443/sqlite-pivot-via-case-how-to-fill-down-a-column