如果在POSTGRES中没有ELSE Scenerio,则创建一个创建表吗?

时间:2019-07-08 14:07:08

标签: sql postgresql-11

我一直在尝试使用Create Table if Not Exists命令,然后再在PostgresQL 11中使用其他命令来创建特定的场景。但是,即使对手册进行了详尽的研究,我似乎也找不到我需要的方式。写下来。

将发生以下情况:

  1. 当数据库和架构中不存在某个表时,它将创建带有特殊选择查询的新表。

  2. 当表确实存在时,它还必须执行相同的查询,但要选择不同的值。这样特定的行就不会加倍。

表中有一个名为ID_0的主键,这样可以帮助我们避免重复值。

CREATE TABLE IF NOT EXISTS testschema.finalplantenpaspoort AS
    SELECT id_0, proefcodet, proefnaam, datumvernietiging, oogstvernietigingsmethode, objectnr, productcode, potnummer, dosis, oppervlakte, eenheid, luikb, oogstbestemming, application, opmerking, proefjaar, proefcode, plotletter, plotcijfer, plot, X, Y 
    FROM testschema.outputkruising2
    JOIN testschema.plotjesproefx
    ON outputkruising2.proefcode = weegschaalproeven.internproefnr AND outputkruising2.plotcijfer = weegschaalproeven.objectnr AND outputkruising2.plotletter LIKE ANY (regexp_split_to_array(weegschaalproeven.application , '\s*'))

ELSE  INSERT INTO testschema.finalplantenpaspoort
        SELECT DISTINCT id_0, proefcodet, proefnaam, datumvernietiging, oogstvernietigingsmethode, objectnr, productcode, potnummer, dosis, oppervlakte, eenheid, luikb, oogstbestemming, application, opmerking, proefjaar, proefcode, plotletter, plotcijfer, plot, X, Y 
        FROM testschema.plantenpaspoort 
        JOIN testschema.weegschaalproeven
        ON plantenpaspoort.proefcode = weegschaalproeven.internproefnr AND plantenpaspoort.plotcijfer = weegschaalproeven.objectnr AND plantenpaspoort.plotletter LIKE ANY (regexp_split_to_array(weegschaalproeven.application , '\s*'))

有什么建议吗?

编辑:所以这是使它起作用的新代码,但我想浓缩为1个查询,而不仅仅是2个单独的查询:

CREATE TABLE IF NOT EXISTS testschema.finalplantenpaspoort AS
SELECT proefcodet, proefnaam, datumvernietiging, oogstvernietigingsmethode, objectnr, productcode, potnummer, dosis, oppervlakte, eenheid, luikb, oogstbestemming, application, opmerking, proefjaar, proefcode, plotletter, plotcijfer, plot, X, Y 
FROM testschema.outputkruising2
JOIN testschema.plotjesproefx
ON outputkruising2.proefcode = weegschaalproeven.internproefnr AND outputkruising2.plotcijfer = weegschaalproeven.objectnr AND outputkruising2.plotletter LIKE ANY (regexp_split_to_array(weegschaalproeven.application , '\s*'));

INSERT INTO testschema.finalplantenpaspoort;
SELECT DISTINCT proefcodet, proefnaam, datumvernietiging, oogstvernietigingsmethode, objectnr, productcode, potnummer, dosis, oppervlakte, eenheid, luikb, oogstbestemming, application, opmerking, proefjaar, proefcode, plotletter, plotcijfer, plot, X, Y 
FROM testschema.plantenpaspoort 
JOIN testschema.weegschaalproeven
ON plantenpaspoort.proefcode = weegschaalproeven.internproefnr AND plantenpaspoort.plotcijfer = weegschaalproeven.objectnr AND plantenpaspoort.plotletter LIKE ANY (regexp_split_to_array(weegschaalproeven.application , '\s*'))
    ON CONFLICT DO NOTHING;

Edit2:问题已解决,谢谢大家的反馈。编辑3:忽略以前的编辑,一个新问题已经到来。

Create TABLE IF NOT EXISTS testschema.finalplantenpaspoort AS
 SELECT id_0, proefcodet, proefnaam, datumvernietiging, oogstvernietigingsmethode, objectnr, productcode, potnummer, dosis, oppervlakte, eenheid, luikb, oogstbestemming, application, opmerking, proefjaar, proefcode, plotletter, plotcijfer, plot, X, Y
 FROM testschema.outputkruising3
 JOIN testschema.weegschaalproeven
 ON outputkruising3.proefcode = weegschaalproeven.internproefnr AND outputkruising3.plotcijfer = weegschaalproeven.objectnr AND outputkruising3.plotletter LIKE ANY (regexp_split_to_array(weegschaalproeven.application , '\s*'));
 ALTER TABLE testschema.finalplantenpaspoort
  ALTER COLUMN id_0 SET NOT NULL,
  ADD UNIQUE (id_0),
  OWNER TO test_admin_test;

INSERT INTO testschema.finalplantenpaspoort
 SELECT DISTINCT id_0, proefcodet, proefnaam, datumvernietiging, oogstvernietigingsmethode, objectnr, productcode, potnummer, dosis, oppervlakte, eenheid, luikb, oogstbestemming, application, opmerking, proefjaar, proefcode, plotletter, plotcijfer, plot, X, Y 
 FROM testschema.outputkruising3
 JOIN testschema.weegschaalproeven
 ON outputkruising3.proefcode = weegschaalproeven.internproefnr AND outputkruising3.plotcijfer = weegschaalproeven.objectnr AND outputkruising3.plotletter LIKE ANY (regexp_split_to_array(weegschaalproeven.application , '\s*'))
 ON CONFLICT DO NOTHING;

0 个答案:

没有答案