Использование JOIN в создании представления UNION ALL - PullRequest
0 голосов
/ 06 июня 2019

Я создаю представление, объединяющее две таблицы с некоторыми похожими полями и некоторыми разнородными полями.У меня этот 95% работает, но есть одно поле из таблицы A, которое совпадает с полем из таблицы B, но только если вы используете это поле из B в качестве соединения для извлечения поля из таблицы C. Единственная часть кода нижеэто не работает, это JOIN.Я мог бы просто вставить оба поля и выполнить логику для получения provider_id из ehruser_id в модели, но я чувствую, что это должно быть выполнимо в SQL, и у меня просто нет знаний, чтобы получить этопоследний бит еще работает

DROP VIEW IF EXISTS vunifiedschedule CASCADE;
CREATE VIEW vunifiedschedule AS
SELECT
    schedule_block.id as vid,
    schedule_block.reason as vblock_reason,
    NULL as vappointment_reason_id,
    schedule_block.when_ts as vwhen,
    schedule_block.deleted_ts as vdeleted_when,
    schedule_block.placeofservice_id as vlocation_id,
    schedule_block.duration as vduration,
    true as vappointment_book,
    schedule_block.note as vnote
FROM schedule_block
LEFT JOIN ( SELECT id FROM provider) as vprovider_id ON provider.ehruser_id = schedule_block.ehruser_id
UNION ALL
SELECT
    appointment.id AS vid,
    NULL as vblock_reason,
    appointment.appointmentreason_id AS vappointment_reason_id,
    appointment.appt_when AS vwhen,
    appointment.deleted_when AS vdeleted_when,
    appointment.location_id AS vlocation_id,
    appointment.visit_length AS vduration,
    appointment.appointment_book as vappointment_book,
    appointment.note AS vnote,
    appointment.provider_id as vprovider_id
FROM appointment

Я получаю ошибку ERROR: missing FROM-clause entry for table "provider" LINE 14: ...ELECT id FROM provider) as vprovider_id ON provider.e...

Ответы [ 3 ]

1 голос
/ 06 июня 2019

Ошибка довольно очевидна.У вас нет provider.Я думаю, что вы намереваетесь:

FROM schedule_block LEFT JOIN
     ( SELECT id FROM provider) vprovider_id
     ON vprovider.ehruser_id = schedule_block.ehruser_id
--------^

Однако подзапрос не нужен:

FROM schedule_block LEFT JOIN
     provider
     ON provider.ehruser_id = schedule_block.ehruser_id
1 голос
/ 06 июня 2019
  1. 1-я строка выбора имеет 9 столбцов, а 2-я строка выбора имеет 10 столбцов.Это представление приведет к ошибке с сообщением «В блоке запроса неверное количество столбцов результата
0 голосов
/ 06 июня 2019

Вы выбрали 9 столбцов из первой таблицы и 10 из второй, при использовании объединения у вас должно быть одинаковое количество столбцов в обоих запросах, а выбранные столбцы типа должны совпадать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...