【问题标题】:SQL (MYSQL, Postgres) Lookup/report tableSQL (MYSQL, Postgres) 查找/报告表
【发布时间】:2020-04-23 03:07:04
【问题描述】:

我基本上是在为我的三个表制作一个查找表,但它没有做我想要的。这 3 个表是通过加载 3 个不同的 csv 文件创建的。

我要做的是将这些表中的 ID 插入到查找表中。

这是我不断得到的:

---------------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 上进行无休止的查询。我尝试了其他嵌套示例,但都没有成功。

我也在使用外键,当我手动输入一个新值时它会起作用,但由于其他表来自加载的 CSV 文件,我必须手动输入已经存在的值。

我真的不知道该怎么办。

【问题讨论】:

    标签: mysql sql postgresql


    【解决方案1】:

    如果我理解正确你想要这样的东西应该可以工作

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      • 2012-11-17
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      相关资源
      最近更新 更多