Как объединить два столбца в SQLite? - PullRequest
1 голос
/ 10 февраля 2012

У меня есть база данных материалов, которая разбита на две таблицы, A и B, каждая из которых содержит название материала, свойство и ссылку на свойство.Каждый материал может иметь несколько свойств и, следовательно, несколько ссылок.Затем я соединяю две таблицы по названию материала, в результате получается таблица со строкой на материал (и столбец для каждого свойства).

Проблема состоит в том, что я хотел бы объединить все ссылки дляданный материал в единый неповторяющийся список.Прямо сейчас у меня есть столбец с group_concat(distinct) всех ссылок на материал из таблицы A и один столбец со всеми ссылками на материал из таблицы 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

...