我在弄清楚如何在一个表中插入多个值时遇到麻烦,该表将检查另一个表是否存储了所需的值。我目前正在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);
答案 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')
的值中搜索所需的键来选择所需的键。