У меня есть таблица с 3 столбцами, которая содержит несколько потоков данных в одной таблице.
val_name
- это имя потока данных, val_sequence
- это увеличивающийся порядковый номер, а val
содержит данные. Объединенные name
и sequence
подобны составному индексу.
![enter image description here](https://i.stack.imgur.com/IgffS.png)
Существующие val_name
потоки в этой таблице являются a, b. Я бы хотел, чтобы пользователи могли запрашивать поток c (которого нет в таблице) и базу данных для динамического возврата a * b.
a * b в этом случае будет похоже на умножение двух таблиц, одна из которых содержит только val_name
a, другая val_name
b, а затем объединяется в val_sequence
(во многом как умножение индексированных рядов панд питона).
Таким образом, результаты будут:
val_sequence val_name val
0 c 80
1 c 5
Идея состоит в том, что пользователи должны иметь возможность запрашивать a или b или c и получать данные без необходимости знать, что a и b содержат данные, а c содержит только ссылки. возможно, что некоторые порядковые номера отсутствуют как в середине, так и на любом конце.
Я не смог придумать, как обеспечить такую гибкость. Достаточно ли гибки представления SQL для этого? И если да, не могли бы вы привести простой пример? Если нет, что может быть работоспособной альтернативой? Любой двигатель базы данных на ваш выбор в порядке.
Для удобства я предоставляю код SQL, который создает таблицу и вставляет указанные выше значения, а также создает два представления. Это не делает то, что мне нужно, но это начало для тех, кто хочет попробовать.
CREATE TABLE IF NOT EXISTS valdb (
val_name VARCHAR(255),
val INT,
val_sequence int
);
INSERT into valdb (val_name, val, val_sequence) VALUES ("a",10,0);
INSERT into valdb (val_name, val, val_sequence) VALUES ("a", 1,1);
INSERT into valdb (val_name, val, val_sequence) VALUES ("b", 8,0);
INSERT into valdb (val_name, val, val_sequence) VALUES ("b", 5,1);
CREATE VIEW `a` AS SELECT val_name, val, val_sequence from valdb WHERE val_name = "a" ;
CREATE VIEW `b` AS SELECT val_name, val, val_sequence from valdb WHERE val_name = "b" ;