Найти варианты без подзапросов? - PullRequest
0 голосов
/ 16 мая 2019

Я работаю с очень мета-системой, которая позволяет пользователю определять свою собственную форму и отчеты ... думаю, списки sharepoint или wordpress, но более специфичные для рынка.

В данном конкретном случае клавиша "Collection, Row"У наборов всегда должен быть один отдельный table_id для одного отдельного folder_id, и мы нашли случай, когда некоторые недопустимые данные были получены, и я использовал приведенный ниже запрос для проверки на наличие проблемы.

Мне любопытно, есть лиспособ получения результатов без использования подзапросов.

Это всего лишь учебный / теоретический вопрос, но в конечном итоге мне может понадобиться ввести проверочное ограничение, чтобы эти варианты и производительность не вступили в игру.

/* Only one Database table per collection set */
SELECT
    ic.folder_id "Folder #"
  , ic.table_id "Table #"
  , LISTAGG(ic.column_id
  , ',') WITHIN GROUP(
    ORDER BY
        ic.folder_id
      , ic.table_id
    ) "Columns"
FROM
    cols ic
WHERE
    ic.folder_id IN (
        SELECT
            ic02.folder_id
        FROM
            (
                SELECT
                    ic01.folder_id
                  , ic01.table_id
                FROM
                    cols ic01
                WHERE
                    v.key_set = 'Collection,Row'
                GROUP BY
                    folder_id
                  , table_id
            ) ic02
        GROUP BY
            ic02.folder_id
        HAVING
            COUNT(0) > 1
    )
GROUP BY
    ic.folder_id
  , ic.table_id;
<?xml version='1.0'  encoding='8859_9' ?>
<RESULTS>
    <ROW>
        <COLUMN NAME="Folder_#">315</COLUMN>
        <COLUMN NAME="Table_#">2141</COLUMN>
        <COLUMN NAME="Variables">4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412</COLUMN>
    </ROW>
    <ROW>
        <COLUMN NAME="Folder_#">315</COLUMN>
        <COLUMN NAME="Table_#">9020</COLUMN>
        <COLUMN NAME="Variables">10924,10926,10934,10935</COLUMN>
    </ROW>
    <ROW>
        <COLUMN NAME="Folder_#">316</COLUMN>
        <COLUMN NAME="Table_#">2142</COLUMN>
        <COLUMN NAME="Variables">4413,4414,4415,4416,4417,4418,4419</COLUMN>
    </ROW>
    <ROW>
        <COLUMN NAME="Folder_#">316</COLUMN>
        <COLUMN NAME="Table_#">9021</COLUMN>
        <COLUMN NAME="Variables">10943,10945,10949,10953,10954</COLUMN>
    </ROW>
</RESULTS>

1 Ответ

0 голосов
/ 16 мая 2019

Я думаю, что это дало бы те же результаты -

SELECT
    ic.folder_id "Folder #"
  , ic.table_id "Table #"
  , LISTAGG(ic.column_id
  , ',') WITHIN GROUP(
    ORDER BY
        ic.folder_id
      , ic.table_id
    ) "Columns"
FROM
    cols ic
WHERE key_set = 'Collection,Row'
GROUP BY
    ic.folder_id
  , ic.table_id
HAVING
    COUNT(0) > 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...