скобки после псевдонима - PullRequest
0 голосов
/ 11 мая 2018

Я наткнулся на аккуратную статью об использовании generate_series для создания табличных данных. автор делает большую работу по объяснению кода, но есть некоторые вещи, которые я до сих пор не понимаю. х после псевдонима comp3syl(x) и z2(x) - это присвоение имени столбца производной таблицы x? И как называется этот синтаксис? У меня проблемы с поиском документации без ключевых слов

SELECT(
SELECT concat_ws(' ',name_first, name_last) as generated
FROM (
    SELECT string_agg(x,'')
    FROM (
        select start_arr[ 1 + ( (random() * 25)::int) % 16 ]
        FROM
        (
            select '{CO,GE,FOR,SO,CO,GIM,SE,CO,GE,CA,FRA,GEC,GE,GA,FRO,GIP}'::text[] as start_arr
        ) syllarr,
        -- need 3 syllabes, and force generator interpretation with the '*0' (else 3 same syllabes)
        generate_series(1, 3 + (generator*0))
    ) AS comp3syl(x)
) AS comp_name_1st(name_first),
(
    SELECT x[ 1 + ( (random() * 25)::int) % 14 ]
    FROM (
        select '{Ltd,& Co,SARL,SA,Gmbh,United,Brothers,& Sons,International,Ext,Worldwide,Global,2000,3000}'::text[]
    ) AS z2(x)
) AS comp_name_last(name_last)
)
FROM generate_series(1,10000) as generator

для всех, кто интересуется вот ссылка на статью: https://regilero.github.io/postgresql/english/2017/06/26/postgresql_advanced_generate_series/

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

В некоторых базах данных, но не во всех, псевдоним таблицы может принимать список псевдонимов столбцов.Вот как называются столбцы, определяемые псевдонимом таблицы.

Рассмотрим следующие два запроса:

select *
from (values (1)) x;

select *
from (values (1)) x(a);

В первом возвращаемом столбце не указано имя.Во втором столбец называется «а».

Причина использования его с generate_series() состоит в том, что функция возвращает столбец - действительно полезный столбец, на самом деле.Но как вы относитесь к этому?Я обычно использую что-то вроде gs(n), поэтому столбец называется gs.n.Вы также можете использовать только generate_series() n, и столбец может называться n или n.n.

Для самого подзапроса я всегда помещаю псевдоним столбца внутри подзапроса.Не все базы данных поддерживают именование столбцов псевдонимами таблиц, поэтому столбцы в подзапросе проще называть.

0 голосов
/ 11 мая 2018

Из документации :

Другая форма псевдонима таблицы дает временные имена столбцам таблицы, а также самой таблице:

FROM table_reference [AS] псевдоним (column1 [, column2 [, ...]])

Если указано меньше псевдонимов столбцов, чем в фактической таблице есть столбцы, остальные столбцы не переименовываются.Этот синтаксис особенно полезен для самостоятельных объединений или подзапросов.

В коде, который вы дали, вызовы generate_series() не являются псевдонимами в самих подзапросах, поэтому автор называет их при псевдониме подзапроса.

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