SQLITE:使用主键约束合并来自不同数据库的表
SQLITE: Merge tables from different databases with Primary Key Constraint
我想 concatenate/append 来自 2 个不同数据库(数据库 X 和 Y)的表。
ATTACH "all\tab_X.db" AS db1;
ATTACH "all\tab_Y.db" AS db2;
INSERT INTO db1.PAYMENT SELECT * FROM db2.PAYMENT
但是这给了我这个错误:UNIQUE 约束失败:PAYMENT.ID
如何创建一个将 ID 与数据库名称组合在一起的新列(例如:X_123、Y_123)并将其设为主键?
Table DB X
Pmt_ID
P_CUSTOMER_NAME
P_CASH_AMOUNT
1
ABC ENTERPRISE
1035.18
2
RAS HOLDING
385.19
3
SEMANGAT BHD
622.21
Table DB Y
Pmt_ID
P_CUSTOMER_NAME
P_CASH_AMOUNT
1
ZNZ MINI MARKET
338.14
2
SEMANGAT SDN BHD
298.92
3
TAFFANY MARKETING
253.34
我要的结果
PK
Pmt_ID
P_CUSTOMER_NAME
P_CASH_AMOUNT
X1
1
ABC ENTERPRISE
1035.18
X2
2
RAS HOLDING
385.19
X3
3
SEMANGAT BHD
622.21
Y1
1
ZNZ MINI MARKET
338.14
Y2
2
SEMANGAT SDN BHD
298.92
Y3
3
TAFFANY MARKETING
253.34
先附上3个数据库:
ATTACH "all\tab_X.db" AS db1;
ATTACH "all\tab_Y.db" AS db2;
ATTACH "all\tab_Z.db" AS db3;
新建 table:
CREATE TABLE db3.PAYMENT(Pmt_ID TEXT PRIMARY KEY, P_CUSTOMER_NAME TEXT, P_CASH_AMOUNT REAL);
最后插入行:
INSERT INTO db3.PAYMENT(Pmt_ID, P_CUSTOMER_NAME, P_CASH_AMOUNT)
SELECT 'X' || Pmt_ID, P_CUSTOMER_NAME, P_CASH_AMOUNT FROM db1.PAYMENT
UNION ALL
SELECT 'Y' || Pmt_ID, P_CUSTOMER_NAME, P_CASH_AMOUNT FROM db2.PAYMENT
我想 concatenate/append 来自 2 个不同数据库(数据库 X 和 Y)的表。
ATTACH "all\tab_X.db" AS db1;
ATTACH "all\tab_Y.db" AS db2;
INSERT INTO db1.PAYMENT SELECT * FROM db2.PAYMENT
但是这给了我这个错误:UNIQUE 约束失败:PAYMENT.ID
如何创建一个将 ID 与数据库名称组合在一起的新列(例如:X_123、Y_123)并将其设为主键?
Table DB X
Pmt_ID | P_CUSTOMER_NAME | P_CASH_AMOUNT |
---|---|---|
1 | ABC ENTERPRISE | 1035.18 |
2 | RAS HOLDING | 385.19 |
3 | SEMANGAT BHD | 622.21 |
Table DB Y
Pmt_ID | P_CUSTOMER_NAME | P_CASH_AMOUNT |
---|---|---|
1 | ZNZ MINI MARKET | 338.14 |
2 | SEMANGAT SDN BHD | 298.92 |
3 | TAFFANY MARKETING | 253.34 |
我要的结果
PK | Pmt_ID | P_CUSTOMER_NAME | P_CASH_AMOUNT |
---|---|---|---|
X1 | 1 | ABC ENTERPRISE | 1035.18 |
X2 | 2 | RAS HOLDING | 385.19 |
X3 | 3 | SEMANGAT BHD | 622.21 |
Y1 | 1 | ZNZ MINI MARKET | 338.14 |
Y2 | 2 | SEMANGAT SDN BHD | 298.92 |
Y3 | 3 | TAFFANY MARKETING | 253.34 |
先附上3个数据库:
ATTACH "all\tab_X.db" AS db1;
ATTACH "all\tab_Y.db" AS db2;
ATTACH "all\tab_Z.db" AS db3;
新建 table:
CREATE TABLE db3.PAYMENT(Pmt_ID TEXT PRIMARY KEY, P_CUSTOMER_NAME TEXT, P_CASH_AMOUNT REAL);
最后插入行:
INSERT INTO db3.PAYMENT(Pmt_ID, P_CUSTOMER_NAME, P_CASH_AMOUNT)
SELECT 'X' || Pmt_ID, P_CUSTOMER_NAME, P_CASH_AMOUNT FROM db1.PAYMENT
UNION ALL
SELECT 'Y' || Pmt_ID, P_CUSTOMER_NAME, P_CASH_AMOUNT FROM db2.PAYMENT