Факторинг подзапросов не может работать в postgresql

Когда я использую postgresql, я сталкиваюсь с проблемой. Вот код:

    WITH t1 AS (
    SELECT
    TABLE_NAME AS TABELA
FROM
    INFORMATION_SCHEMA.COLUMNS
WHERE 
    COLUMN_NAME LIKE 'nu_cns' )
SELECT 
    TABLE_NAME,
    COLUMN_NAME
FROM 
    INFORMATION_SCHEMA.COLUMNS
WHERE 
    TABLE_NAME IN t1

Если я его запустил, то получу ошибку:

ERROR:  syntax error at or near "t1"
LINE 14:  TABLE_NAME IN t1
                    ^
SQL state: 42601
Character: 211

Но что странно, если я заменю t1 на весь подзапрос, он может успешно работать, например:

    WITH t1 AS (
    SELECT
    TABLE_NAME AS TABELA
FROM
    INFORMATION_SCHEMA.COLUMNS
WHERE 
    COLUMN_NAME LIKE 'nu_cns' )
SELECT 
    TABLE_NAME,
    COLUMN_NAME
FROM 
    INFORMATION_SCHEMA.COLUMNS
WHERE 
    TABLE_NAME IN (
    SELECT
    TABLE_NAME AS TABELA
FROM
    INFORMATION_SCHEMA.COLUMNS
WHERE 
    COLUMN_NAME LIKE 'nu_cns' )

Видите ли, на самом деле подзапрос точно такой же, как и для t1. Так почему же первый не может работать? Спасибо!

3
0
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Попробуйте ниже: вам нужно выбрать table_name из t1 в подзапросе

WITH t1 AS 
( 
  SELECT TABLE_NAME AS TABELA
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE COLUMN_NAME LIKE 'nu_cns' 
)

SELECT 
    TABLE_NAME,
    COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME IN (select table_name from t1)

Спасибо! Я просто ошибочно подумал, что t1 уже является результатом выбора таблицы, но на самом деле это всего лишь имя таблицы ...

yizheshexin 26.10.2018 07:02

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