用外键Postgresql插入多个值

时间:2018-08-24 10:49:38

标签: sql postgresql

我在弄清楚如何在一个表中插入多个值时遇到麻烦,该表将检查另一个表是否存储了所需的值。我目前正在PostgreSQL服务器中执行此操作,但是将在我的Java程序的PreparedStatements中实现它。

user_id是一个外键,它引用了模拟2中的主键。我一直在尝试检查模拟2是否具有值('foo1','bar1')和('foo2','bar2')。

在此之后,我尝试将新值插入到模拟1中,该值将具有日期和整数值,并将模拟2中行的主键引用到模拟1中的外键。

mock1表如下:

===============================
| date  |  time    |  user_id |
| date  |  integer |  integer | 
|       |          |          |

表mik2是:

==================================
| Id      |  name   |  program   |
| integer |  text   |  test      |

Id是表的主键,名称为UNIQUE。

我一直在尝试这种解决方案https://dba.stackexchange.com/questions/46410/how-do-i-insert-a-row-which-contains-a-foreign-key

但是,我无法使其工作。有人可以指出正确的语法是什么,我真的很感激。

编辑:

创建表语句为:

CREATE TABLE mock2(
   id SERIAL PRIMARY KEY UNIQUE,
   name text NOT NULL,
    program text NOT NULL UNIQUE
);

CREATE TABLE mock1(
   date date,
   time_spent INTEGER,
   user_id integer REFERENCES mock2(Id) NOT NULL);

1 个答案:

答案 0 :(得分:0)

好,所以我找到了自己的问题的答案。

WITH ins (date,time_spent, id) AS
( VALUES
    ( '22/08/2012', 170, (SELECT id FROM mock3 WHERE program ='bar'))
)  
INSERT INTO mock4
   (date, time_spent, user_id) 
SELECT 
    ins.date, ins.time_spent, mock3.id
FROM 
  mock3 JOIN ins
    ON ins.id = mock3.id ;

我试图从第一个表中获取2个值,将它们匹配,然后在下一个表中插入2个新值,但是我意识到我应该使用主键和外键来发挥自己的优势。

我现在改为在ID上加入JOIN,然后通过从第三行中带有(SELECT id FROM mock3 WHERE program ='bar')的值中搜索所需的键来选择所需的键。