-1

目前,我正在尝试基于两个具有三个条件的表的 Inner Join 查询创建一个新表。但是,SQL 错误窗口总是告诉我这些列不存在,即使它们显然存在。

因此,当两个特定值在列表中彼此相等并且第三个值在哪里共享相似性时,这就是必须发生的内连接。

这是因为虽然第一个表中的 Plotletter 实际上只有一个字母,例如 A。应用程序可以写成 ABCD。

我也已经尝试按照建议明确将字段引用到正确的表,但错误仍然存​​在。

CREATE TABLE testschema.FinalPlantenpaspoort 
AS
SELECT PrimaryIndex, jaarpr, proefcode, plotleter, plotcijfer, plot, X, Y
FROM testschema.plantenpaspoortsjabloon
  JOIN testschema.weegschaalproeven
    ON plantenpaspoortsjabloon.proefcode = weegschaalproeven.Intern_Proef_Nr 
   AND plantenpaspoortsjabloon.plotcijfer = weegschaalproeven.Objectnr 
WHERE plantenpaspoortsjabloon.plotletter LIKE weegschaalproeven.Application
;

这是他们给我的错误和建议,但没有运气。

ERROR:  column weegschaalproeven.intern_proef_nr does not exist
LINE 5: ON plantenpaspoortsjabloon.proefcode = weegschaalproeven.Int...
                                               ^
HINT:  Perhaps you meant to reference the column "weegschaalproeven.Intern_Proef_Nr".
SQL state: 42703
Character: 237

**

编辑 2/07/2019:问题已解决,但选择了 0 条记录。

** 好的,问题似乎解决了,但是代码确实有效时出现了一种新问题,因为 JOIN 选择了 0 条记录。这不应该是这样的。我知道有匹配的记录,因为这是一个测试,我确保 QGIS 中的 shapefile 表包含相关的数据。

Create TABLE testschema.finalplantenpaspoort AS
SELECT jaarpr, proefcodet, plotletter, plotcijfer, plot, X, Y
FROM testschema.plantenpaspoortsjabloon
JOIN testschema.weegschaalproeven
ON plantenpaspoortsjabloon.proefcodet = weegschaalproeven.intern_proef_nr AND plantenpaspoortsjabloon.plotcijfer = weegschaalproeven.objectnr 
WHERE plantenpaspoortsjabloon.plotletter LIKE weegschaalproeven.application
;
**SELECT 0**

Query returned successfully in 72 msec.
4

1 回答 1

0

我找到了我的零选择问题的解决方案,显然我需要设置一个特殊的 Like 情况,否则记录无法在这里匹配:

Create TABLE 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.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*'))
;
GRANT ALL ON TABLE testschema.finalplantenpaspoort TO test_admin_test WITH GRANT OPTION;
于 2019-07-03T11:42:05.827 回答