Множественная ошибка подзапроса "неверный идентификатор"

Я работаю над этим кодом, но я продолжаю получать неверный идентификатор для t2.nabp_num.

 `with t1 as (query1),
   t2 as (query2)
   Select t1.*, t2.device_count, 
   d.* from t1 
   inner join t2 on
   t1.nabp_num = t2.nabp_num and
   t1.dt = t2.dt and
   t1.d_member = t2.d_member
   inner join drug_product d on
   t1.d_product_id = d.product_id

   order by claim_count desc;`

я получаю неверный идентификатор

Избавьтесь от запятой после t1 d.* from t1, s/b d.* from t1, как будто вы выполняете перекрестное соединение и внутреннее соединение вместе. компилятор запутался, поэтому t2 не существует. Также: вы определяете t2 CTE с 4 полями. nabp_num не входит в их число (как и fill_Dt); и вы не используете псевдоним одного из ваших счетчиков, на который становится некрасиво ссылаться позже ... Очень странно, может быть, вместо таких счетчиков вам следует использовать оконную функцию?

xQbert 29.03.2022 23:37

Нам нужно будет увидеть DDL всех включенных структур таблиц, образцы данных, запрос, который вы попробовали (предоставили), и ожидаемые результаты. В противном случае у нас есть неполная информация, чтобы помочь.

xQbert 30.03.2022 13:44
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как уже отмечалось, вы не можете ссылаться на то, чего не существует.

Это, безусловно, помогло бы, если бы вы отправили фактический запрос вместо недействительного

with t1 as (query1          --> what is "query1"?
     Order by ...

В любом случае: как NABP_NUM упоминается здесь:

inner join t2 on t1.nabp_num = t2.nabp_num

это означает, что он должен быть частью как t1, так и t2. Однако, поскольку результат t2 CTE получен из t1, возможно, вам вообще не нужен t1...

Если вы добавите все столбцы, которые в настоящее время отсутствуют либо в списке столбцов select, либо в предложении group by, запрос будет выглядеть так (см. комментарии в коде):

WITH
   t1
   AS
      (SELECT d_member_id,
              dt,
              device_type,
              claim_id,
              nabp_num,          --> add NABP_NUM
              d_member_hq_id     --> add D_MEMBER_HQ_ID
              d_drug_product_id  --> add D_DRUG_PRODUCT_ID
         FROM some_table         --> which table?
      ),       --> remove ORDER BY, it is useless here
   t2
   AS
      (  SELECT d_member_id,
                dt,
                nabp_num,        --> add NABP_NUM
                d_member_hq_id,  --> add D_MEMBER_HQ_ID
                COUNT (DISTINCT device_type) AS device_count,
                COUNT (DISTINCT claim_ID) AS claim_count
           FROM t1
       GROUP BY d_member_id, dt, nabp_num, d_member_hq_id)   --> add NABP_NUM and D_MEMBER_HQ_ID
  SELECT t1.*, t2.device_count, d.*
    FROM t1
         INNER JOIN t2
            ON     t1.nabp_num = t2.nabp_num
               AND t1.dt = t2.dt
               AND t1.d_member_hq_id = t2.d_member_hq_id
         INNER JOIN vmd_drug_product d
            ON t1.d_drug_product_id = d.d_drug_product_id
ORDER BY t2.claim_count DESC;

Несмотря на то, что это больше не должно возвращать никаких синтаксических ошибок (предполагая, что используемые здесь столбцы действительно существуют в some_table), я не могу сказать, вернет ли это или не вернет желаемый результат.

Другие вопросы по теме