0
當我嘗試複製臨時表Tperson中的數據時,它嘗試複製所有數據,並且某些數據在Customer.PersonID中沒有匹配的PersonID。PostgreSQL複製數據(嘗試複製不符合WHERE條件的數據)
DROP TABLE IF EXISTS Tperson;
COPY Customer (CustomerID,PersonID) FROM 'C:\Users\DieCriminal\Desktop\data\Customer.txt' CSV HEADER;
CREATE TEMPORARY TABLE Tperson(PersonID integer,Title text,FirstName text,LastName text);
COPY Tperson FROM 'C:\Users\DieCriminal\Desktop\data\Person.txt' CSV HEADER;
INSERT INTO Customer (Person.PersonID,Person.Title,Person.FirstName,Person.LastName)
SELECT Tperson.PersonID,Tperson.Title,Tperson.FirstName,Tperson.LastName
From Tperson,Customer
WHERE Customer.PersonID = Tperson.PersonID;
SELECT *
FROM Customer;
所以它最終是這樣的:
ERROR: null value in column "customerid" violates not-null constraint
DETAIL: Failing row contains (null, null, (291,Mr.,Gustavo,Achong,)).
********** Error **********
ERROR: null value in column "customerid" violates not-null constraint
SQL state: 23502
Detail: Failing row contains (null, null, (291,Mr.,Gustavo,Achong,)).
而且,這裏是表/類型: (有些表/類型將數據加載後進行修改)
CREATE TABLE Customer(
CustomerID integer,
PersonID integer,
Person PersonType,
PRIMARY KEY(CustomerID));
CREATE TYPE PersonType AS(
PersonID integer,
Title text,
FirstName text,
LastName text,
Address AddressType[]);
CREATE TYPE AddressType AS(
AddressID integer,
AddressLine1 text,
AddressLine2 text,
City text,
PostalCode text);
我希望它只複製在兩個表中都有匹配personID的數據。這就是我認爲WHERE子句會做的事情,但事實並非如此。 因此,歡迎任何有關我的代碼的答案或任何建議/提示。
您的插入不會爲列'customerid'提供值,並且列未定義爲具有默認值,這意味着您要將「null」值放入該列中 – 2015-01-20 19:11:46
表客戶已具有CustomerID的值,PersonID,因爲 COPY Customer(CustomerID,PersonID)FROM'C:\ Users \ DieCriminal \ Desktop \ data \ Customer.txt'CSV HEADER; 我想要做的插入是將值添加到其餘列Tperson.PersonID匹配Customer.PersonID。 我的插入不應該爲列CustomerID提供值。 – DieCriminal 2015-01-20 19:17:45
但是你**插入**新行,你沒有更新現有的行。 – 2015-01-20 19:21:36