Я полагаю, что следующее будет работать так, как вы хотите (имена таблиц должны будут измениться, возможно, будут использоваться имена таблиц с пояснениями): -
WITH RECURSIVE all4 AS(
SELECT * FROM
ring1
UNION SELECT * FROM ring2 UNION SELECT * FROM ring3 UNION SELECT * FROM ring4
)
INSERT OR IGNORE INTO newring SELECT * FROM all4
;
SELECT * FROM newring;
Следующее демонстрирует вышесказанное: -
DROP TABLE If EXISTS ring1;
DROP TABLE If EXISTS ring2;
DROP TABLE If EXISTS ring3;
DROP TABLE If EXISTS ring4;
DROP TABLE IF EXISTS newring;
CREATE TABLE IF NOT EXISTS ring1(othercolumn TEXT,members INTEGER,distance REAL);
CREATE TABLE IF NOT EXISTS ring2(othercolumn TEXT,members INTEGER,distance REAL);
CREATE TABLE IF NOT EXISTS ring3(othercolumn TEXT,members INTEGER,distance REAL);
CREATE TABLE IF NOT EXISTS ring4(othercolumn TEXT,members INTEGER,distance REAL);
CREATE TABLE IF NOT EXISTS newring(othercolumn TEXT,members INTEGER,distance REAL, UNIQUE(members,distance));
INSERT INTO ring1 VALUES
('A',10,30.5),('B',11,30.6),('C',12,30.7),('D',13,30.8), -- duplicates not the othercolumn though
('X',100,15.0),('Y',110,17.0),('Z',120,19.0)
;
INSERT INTO ring2 VALUES
('E',10,30.5),('F',11,30.6),('G',12,30.7),('H',13,30.8), -- duplicates not the othercolumn though
('X',200,15.0),('Y',210,17.0),('Z',220,19.0)
;
INSERT INTO ring3 VALUES
('I',10,30.5),('J',11,30.6),('K',12,30.7),('L',13,30.8), -- duplicates not the othercolumn though
('X',300,15.0),('Y',310,17.0),('Z',320,19.0)
;
INSERT INTO ring4 VALUES
('M',10,30.5),('N',11,30.6),('O',12,30.7),('P',13,30.8), -- duplicates not the othercolumn though
('X',400,15.0),('Y',410,17.0),('Z',420,19.0)
;
WITH RECURSIVE all4 AS(
SELECT * FROM
ring1
UNION SELECT * FROM ring2 UNION SELECT * FROM ring3 UNION SELECT * FROM ring4
)
SELECT * FROM all4
;
WITH RECURSIVE all4 AS(
SELECT * FROM
ring1
UNION SELECT * FROM ring2 UNION SELECT * FROM ring3 UNION SELECT * FROM ring4
)
INSERT OR IGNORE INTO newring SELECT * FROM all4
;
SELECT * FROM newring;
Результат: -
![enter image description here](https://i.stack.imgur.com/fv1ct.png)
То есть из 28 строк 16 были добавлены.
16, поскольку каждая из четырех базовых таблиц имеет 3 уникальных строки (т.е. 12 строк), каждая таблица имеет 4 строки, которые имеют одинаковую комбинацию член / расстояние.
Таким образом, только 4 из этих 16 будут добавлены из-за ограничения UNIQUE и INSERT OR IGNORE, и, следовательно, всего будет добавлено 16 строк.
Промежуточный запрос, т. Е. UNION из 4Таблица производит 28 строк в соответствии с: -
![enter image description here](https://i.stack.imgur.com/xskHL.png)