SQL (MYSQL, Postgres) Таблица поиска / отчета - PullRequest
0 голосов
/ 23 апреля 2020

Я в основном делаю таблицу поиска для своих трех таблиц, но она не выполняет то, что я хочу. Эти 3 таблицы были созданы путем загрузки 3 разных файлов CSV.

Я пытаюсь вставить идентификаторы из этих таблиц в поисковую.

Вот что я продолжаю получать:

---------------Lookuptable---------------
|lookup_ID|Table1_ID|Table2_ID|Table3_ID|
|    1    |    1     |        |         |   
|    2    |    2     |        |         | 
|    3    |    3     |        |         |
|         |          |    1   |         |
|         |          |    2   |         |
|         |          |    3   |         |
|         |          |        |    1    |
|         |          |        |    2    |
|         |          |        |    3    |

Что мне нужно, это:

---------------Lookuptable---------------
|lookup_ID|Table1_ID|Table2_ID|Table3_ID |
|    1    |    1     |    1    |    1    |   
|    2    |    2     |    2    |    2    | 
|    3    |    3     |    3    |    3    |

Я понимаю, почему это происходит, он вставляет один ряд ниже каждый раз с одинарными вставками, такими как

insert into Lookuptable(Table1_ID) select T1id from Table1;
and the others...

Но я тоже пробовал вложенные, такие как

insert into Lookuptable(Table1_ID, Table2_ID, Table3_ID) 
select Table1.T1id, Table2.T2id, Table2.T2id from Table1, Table2, Table3;

, но все равно не работает. На самом деле этот сервер просто сбивает сервер Mysql и выполняет бесконечный запрос на Postgres. Я пробовал другие вложенные примеры, но ни один из них не работал.

Я также использую Foreign Keys, которые работают, когда я вручную вводю новое значение, но, поскольку другие таблицы приходят из загруженных файлов CSV, я должен ввести значения уже там вручную.

Я действительно не уверен, что делать.

1 Ответ

0 голосов
/ 23 апреля 2020

Если я правильно понимаю, что вы хотите, что-то подобное должно работать

https://www.db-fiddle.com/f/k6CGsVXazSqJDfwKkdr6S7/1

SET @i:=0,@j:=0,@h:=0;

INSERT INTO Lookuptable
SELECT NULL,t1.ID,t2.ID,t3.ID FROM 
( SELECT @i:=(@i+1) AS temp_id,ID FROM Table1 ) t1
INNER JOIN
( SELECT @j:=(@j+1) AS temp_id ,ID FROM Table2 ) t2 ON t1.temp_id=t2.temp_id
INNER JOIN
( SELECT @h:=(@h+1) AS temp_id ,ID FROM Table3 ) t3 ON t2.temp_id=t3.temp_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...