使用两列创建主键
Create primary key with two columns
我有两个 table,bank_data
和 sec_data
。 Table bank_data
具有 id
、date
、asset
和 liability
列。 date
列分为四等份。
id | date | asset | liability
--------+----------+--------------------
1 | 6/30/2001| 333860 | 308524
1 | 3/31/2001| 336896 | 311865
1 | 9/30/2001| 349343 | 308524
1 |12/31/2002| 353863 | 322659
2 | 6/30/2001| 451297 | 425156
2 | 3/31/2001| 411421 | 391846
2 | 9/30/2001| 430178 | 41356
2 |12/31/2002| 481687 | 46589
3 | 6/30/2001| 106506 | 104532
3 | 3/31/2001| 104196 | 102983
3 | 9/30/2001| 106383 | 104865
3 |12/31/2002| 107654 | 105867
Table sec_data
有 id
、date
和 security
列。我使用以下代码在 R 中将两个 table 组合成一个名为 new_table
的新 table:
dbGetQuery(con, "CREATE TABLE new_table
AS (SELECT sec_data.id,
bank_data.date,
bank_data.asset,
bank_data.liability,
sec_data.security
FROM bank_data,bank_sec
WHERE (bank_data.id = sec_data.id) AND
(bank_data.date = sec_data.date)")
我想在不使用 pgAdmin 的情况下在此 R 代码中设置两个主键(id
和 date
)。我想使用 Constraint bankkey Primary Key (id, date)
之类的东西,但是 AS
和 SELECT
函数让我失望了。
您可以 运行 这两个单独的语句(create table
和 Insert into
)
CREATE TABLE new_table (
id int, date date, asset int, liability int, security int,
CONSTRAINT bankkey PRIMARY KEY (id, date)
) ;
INSERT INTO new_table (id,date,asset,liability,security)
SELECT s.id,
b.date,
b.asset,
b.liability,
s.security
FROM bank_data b JOIN bank_sec s
ON b.id = s.id AND b.date = s.date;
要创建您想要的主键,运行 在您的 CREATE TABLE ... AS
语句之后的以下 SQL 语句:
ALTER TABLE new_table
ADD CONSTRAINT bankkey PRIMARY KEY (id, date);
这样做的好处是主键索引不会减慢数据插入速度。
首先你的查询是错误的..你说 table sec_data
但你分配 table bank_sec
我改写你的查询
CREATE TABLE new_table AS
SELECT
sec_data.id,
bank_data.date,
bank_data.asset,
bank_data.liability,
sec_data.security
FROM bank_data
INNER JOIN sec_data on bank_data.id = sec_data.id
and bank_data.date = sec_data.date
避免使用 Implicit Join
,而是使用 Explicit Join
。正如@ a_horse_with_no_name 所述,您不能在 1 table 中定义超过 1 个主键。所以你所做的是 Composite Primary Key
定义:
is a combination of two or more columns in a table that can be used to
uniquely identify each row in the table
所以你需要 Alter Function
因为你的创建语句基于其他 table..
ALTER TABLE new_table
ADD PRIMARY KEY (id, date);
我有两个 table,bank_data
和 sec_data
。 Table bank_data
具有 id
、date
、asset
和 liability
列。 date
列分为四等份。
id | date | asset | liability
--------+----------+--------------------
1 | 6/30/2001| 333860 | 308524
1 | 3/31/2001| 336896 | 311865
1 | 9/30/2001| 349343 | 308524
1 |12/31/2002| 353863 | 322659
2 | 6/30/2001| 451297 | 425156
2 | 3/31/2001| 411421 | 391846
2 | 9/30/2001| 430178 | 41356
2 |12/31/2002| 481687 | 46589
3 | 6/30/2001| 106506 | 104532
3 | 3/31/2001| 104196 | 102983
3 | 9/30/2001| 106383 | 104865
3 |12/31/2002| 107654 | 105867
Table sec_data
有 id
、date
和 security
列。我使用以下代码在 R 中将两个 table 组合成一个名为 new_table
的新 table:
dbGetQuery(con, "CREATE TABLE new_table
AS (SELECT sec_data.id,
bank_data.date,
bank_data.asset,
bank_data.liability,
sec_data.security
FROM bank_data,bank_sec
WHERE (bank_data.id = sec_data.id) AND
(bank_data.date = sec_data.date)")
我想在不使用 pgAdmin 的情况下在此 R 代码中设置两个主键(id
和 date
)。我想使用 Constraint bankkey Primary Key (id, date)
之类的东西,但是 AS
和 SELECT
函数让我失望了。
您可以 运行 这两个单独的语句(create table
和 Insert into
)
CREATE TABLE new_table (
id int, date date, asset int, liability int, security int,
CONSTRAINT bankkey PRIMARY KEY (id, date)
) ;
INSERT INTO new_table (id,date,asset,liability,security)
SELECT s.id,
b.date,
b.asset,
b.liability,
s.security
FROM bank_data b JOIN bank_sec s
ON b.id = s.id AND b.date = s.date;
要创建您想要的主键,运行 在您的 CREATE TABLE ... AS
语句之后的以下 SQL 语句:
ALTER TABLE new_table
ADD CONSTRAINT bankkey PRIMARY KEY (id, date);
这样做的好处是主键索引不会减慢数据插入速度。
首先你的查询是错误的..你说 table sec_data
但你分配 table bank_sec
我改写你的查询
CREATE TABLE new_table AS
SELECT
sec_data.id,
bank_data.date,
bank_data.asset,
bank_data.liability,
sec_data.security
FROM bank_data
INNER JOIN sec_data on bank_data.id = sec_data.id
and bank_data.date = sec_data.date
避免使用 Implicit Join
,而是使用 Explicit Join
。正如@ a_horse_with_no_name 所述,您不能在 1 table 中定义超过 1 个主键。所以你所做的是 Composite Primary Key
定义:
is a combination of two or more columns in a table that can be used to uniquely identify each row in the table
所以你需要 Alter Function
因为你的创建语句基于其他 table..
ALTER TABLE new_table
ADD PRIMARY KEY (id, date);