我在Windows上使用PostgreSQL 9.1。
我正在从机器自动收集数据到PostgreSQL数据库,这是正常的。数据保存在几个表中,我感兴趣的表称为testrecord
。我有一个名为testcode
的第二个静态表和表之间的连接。我想在testrecord
中选择一些传入数据并填充一个名为finaldata
的新表格,其中parameter
与testid
匹配,而非空白({1}}空值)。
问题1
INSERT INTO
和JOIN
这是最好的方法吗?
问题2
目前所有的字段都是varchar。当我添加一个整数字段
在表finaldata
中(例如自动递增序列)我得到了
column "FdataID" is of type integer but expression
is of type character varying
或column "FdataID" is of type integer
but expression is of type record
我的功能代码如下:
INSERT INTO finaldata
SELECT
"testrecord"."Record",
"testrecord"."Sample",
"testrecord"."SampleOrig",
"testrecord"."Parameter",
"testrecord"."Result",
"testrecord"."ResultOrig",
"testrecord"."Units",
"testrecord"."OperatorID",
"testrecord"."ObsTime",
"testrecord"."MsgTime",
"testcode"."Machine",
"testcode"."TestName",
"testcode"."ShortTestName",
"testcode"."TestID"
FROM testrecord
LEFT OUTER JOIN testcode
ON ("testrecord"."Parameter" = "testcode"."Parameter")
AND ("testrecord"."Machine" = "testcode"."Machine")
WHERE ("testcode"."TestID") IS NOT NULL;
答案 0 :(得分:1)
您写道:
INSERT INTO finaldata
SELECT "testrecord"."Record", /* some column skipped */
FROM testrecord LEFT OUTER JOIN testcode ON ("testrecord"."Parameter" = "testcode"."Parameter") AND ("testrecord"."Machine" = "testcode"."Machine")
WHERE ("testcode"."TestID") IS NOT NULL;
第一件事是:INSERT
部分的哪些列应SELECT
写出?你必须这样指定:
INSERT INTO finaldata ("Record", ...)
SELECT "testrecord"."Record", /* some column skipped */
...
关于错误类型的奇怪消息可能是由此造成的。
第二件事是:
... WHERE ("testcode"."TestID") IS NOT NULL;
任何你暗示你想在函数中使用这个代码(我猜的触发函数)。每次调用此语句都不会只在finaldata
中插入一个新行,而是插入所有内容。那么重复的条目就是某种东西。
所以:
INSERT
部分SELECT
部分中缺少的限定符。哦,是的,问题一:只要SELECT
查询产生正确的数据,就足以在INSERT
内使用:-)如果JOIN
有帮助产生正确的数据 - 没关系。