更新相关表格(Postgres)

时间:2013-05-21 07:15:08

标签: sql postgresql dml

我正在Postgres中创建两个表。

第一张表有一个主列和其他列&在第二个表中有一个主列“MLeaseId”,这些列在第一个表(不是第一个表的主要)和其他列中相同。

如何将数据从第一列表数据复制到第二列数据?

CREATE TABLE leasetype (
  "LeaseTypeId" integer  NOT NULL ,
  "MLeaseId" character varying(45) NOT NULL,
  "Resident" integer NOT NULL,
  "Business" integer NOT NULL,
  "RArea" float  NULL,
  "BArea" float  NULL,
  "RRent" double  NULL,
  "BRent" double NULL,
  PRIMARY KEY (LeaseTypeId)
);

CREATE TABLE masterlease (
  "SrNo" integer unsigned NOT NULL,
  "MLeaseId" varchar(45) NOT NULL,
  "ExtId" integer unsigned NOT NULL,
  "MPlotNo" character varying(45) NOT NULL,
  "DPlotNo" character varying(45) NOT NULL,
  "SheetNo" character varying(45) NOT NULL,
  "NastiNo" character varying(45) NOT NULL,
  "Date" date NOT NULL,
  "LHolderName" character varying(45) NOT NULL,
  "PhoneNo" character varying(45) DEFAULT NULL,
  "TotArea" double NOT NULL,
  "LeaseDuration" float NOT NULL,
  "UseTypeId" int(6) NOT NULL,
  "LFromDate" date NOT NULL,
  "LToDate" date NOT NULL,
  "OrderDtl" text,
  "Remark" text,
  "Address" character varying(300) NOT NULL,
  PRIMARY KEY (MLeaseId)
)

1 个答案:

答案 0 :(得分:1)

您可以通过从其他表中选择数据来插入数据(根据任何查询,您只需要确保查询返回的数据与插入参数相同。 如果我理解正确,你想要添加到masterlease的行,那就是" MLeaseId"列是各种租赁类型列的混合。

试试这个:

INSERT INTO masterlease(
    "SrNo", 
    "MLeaseId"
    )
SELECT 
    123,
    concat(leasetype."MLeaseId",'any_code', leasetype."RArea")::varchar as MLeaseId
FROM
    leasetype

当然,您还需要添加其他值。你可以像我在" SrNo"中那样手动完成。或者您可以在SELECT语句中加入其他表。

不要忘记INSERT INTO语句的列类型必须与SELECT语句完全匹配。您可以通过强制转换(例如:: varchar)来强制执行该操作。