Объединение таблицы Relation в один выходной SQLite - PullRequest
0 голосов
/ 07 апреля 2020

Я использую sqLite и имею две таблицы Profile и Option. Профили могут отличаться от параметров в зависимости от кода (см. Мой пример ниже). В основном пользователи могут создавать собственные профили и, следовательно, код отличается.

Как вывести параметры профиля в список параметров, чтобы у меня был один выход? Единственное отношение, которое у меня есть, основано на коде, но в некоторых профилях есть коды, не указанные в параметрах Я хочу, чтобы коды, не указанные в параметрах, также были включены, а те, которые существуют, не дублировались.

Код ниже, смотрите мой комментарий к ожидаемому результату.

Также здесь создана скрипка. http://sqlfiddle.com/#! 5 / 3e657c / 1/0

CREATE TABLE profile (id INTEGER PRIMARY KEY, profileId INTEGER, value integer, type text, "name" text, "min" integer, "max" integer, "justment" text, "sortOrder" INTEGER, "code", text);
INSERT INTO "profile" ("id", "profileId", "value", "type", "name", "code") VALUES
('1','1', '0', 'c', 'John',  'test_001'),
('2', '1','0', 'c', 'Peter', 'test_002'),
('3','1', '0', 'c', 'Custom Record', 'cust_003');

CREATE TABLE options (id INTEGER PRIMARY KEY , value integer, type text, "name" text, "min" integer, "max" integer, "justment" text, "sortOrder" INTEGER DEFAULT 0, "code" text);

INSERT INTO "options" ("id", "value", "type", "name", "code") VALUES
('1', '0', 'c', 'John',  'test_001'),
('2', '0', 'c', 'Peter', 'test_002'),
('3', '0', 'c', 'Paul', 'test_003'),
('4', '0', 'c', 'Tim', 'test_004');

Ожидаемый вывод Единый список без дубликатов

|Name|
 John
 Peter
 Paul
 Tim
 Custom Record      
/*

Не уверен, что это вообще возможно, но ценить любое понимание. Вероятно, придется сделать это с al oop в PHP, но если есть какой-либо способ SQL, это будет оценено.

1 Ответ

1 голос
/ 08 апреля 2020

Вы можете сделать это с помощью UNION ALL и NOT EXISTS во втором запросе:

select id, value, type, name, code from options
union all
select id, value, type, name, code from profile p
where not exists (
  select 1 from options o
  where p.code = o.code
)

Вы можете изменить список select, чтобы получить нужные столбцы. Смотрите демо . Результаты:

| id  | value | type | name          | code     |
| --- | ----- | ---- | ------------- | -------- |
| 1   | 0     | c    | John          | test_001 |
| 2   | 0     | c    | Peter         | test_002 |
| 3   | 0     | c    | Paul          | test_003 |
| 4   | 0     | c    | Tim           | test_004 |
| 3   | 0     | c    | Custom Record | cust_003 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...