Oracle Query Tuning (Двойной доступ к таблице) - PullRequest
1 голос
/ 08 мая 2009

Я пытаюсь дополнительно настроить этот запрос. Запрос возвращает статус трех разных тестов для каждого образца. Однако, если я хочу дополнительно отфильтровать возвращенные образцы, я должен указать условия в обоих запросах 'SELECT ... FROM sample ...'.

Можно ли переписать этот запрос, ссылаясь на таблицу sample только один раз?

SELECT   sample_id,
         created_on,
         s_acid,
         s_ph,
         s_titr
  FROM 
      (SELECT sample_id, -- Rows w/ same sample_id to columns
              MAX (CASE WHEN tst_tmpl_id = 36 THEN status END) AS s_acid,
              MAX (CASE WHEN tst_tmpl_id = 43 THEN status END) AS s_ph,
              MAX (CASE WHEN tst_tmpl_id = 66 THEN status END) AS s_titr
         FROM (SELECT test_id, test_tmpl_id, sample_id FROM test)
         JOIN (SELECT sample_id      FROM sample WHERE sam_tmpl_id = 18)
              USING (sample_id)
         GROUP BY   sample_id
       )
        -- get other sample fields 
  JOIN (SELECT sample_id, created_on FROM sample WHERE sam_tmpl_id = 18)
       USING (sample_id)

1 Ответ

3 голосов
/ 08 мая 2009
WITH q AS
        (
        SELECT  sample_id, created_on
        FROM    sample
        WHERE   sam_tmpl_id = 18
        )
SELECT  sample_id,
        created_on,
        s_acid,
        s_ph,
        s_titr
FROM    (
        SELECT  sample_id, -- Rows w/ same sample_id to columns
                MAX (CASE WHEN tst_tmpl_id = 36 THEN status END) AS s_acid,
                MAX (CASE WHEN tst_tmpl_id = 43 THEN status END) AS s_ph,
                MAX (CASE WHEN tst_tmpl_id = 66 THEN status END) AS s_titr
        FROM    (
                SELECT  test_id, test_tmpl_id, sample_id
                FROM    test
                )
        JOIN    q
        USING   (sample_id)
        GROUP BY
                sample_id
        )
JOIN    q
USING   (sample_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...