Как исправить Столбец не существует в этом Внутреннем объединении двух таблиц с тремя условиями? - PullRequest
0 голосов
/ 01 июля 2019

В настоящее время я пытаюсь создать новую таблицу на основе запроса внутреннего объединения двух таблиц с тремя условиями. Однако в окне «Ошибка 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 записей.

** Хорошо, проблема, кажется, решена, но есть новый тип проблем, в то время как код работает, 0 записей выбраны из-за JOIN. И это не должно быть так. Я знаю, что есть соответствующие записи, потому что это тест, в котором я убедился, что таблицы шейп-файлов в QGIS содержат соответствующие данные.

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.

1 Ответ

0 голосов
/ 03 июля 2019

Я нашел решение моей проблемы с нулевым выбором, очевидно, мне нужно было установить специальное условие 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;
...