Как получить одну строку из таблицы 2 (иметь столбец blob) для каждой строки в таблице 1? - PullRequest
0 голосов
/ 14 февраля 2019

Я использую этот запрос для получения первой строки из t2, которая соответствует первичному ключу в t1, но я не получаю правильных результатов, так как не могу найти правильный способ написания запроса

select t1.id as id , t1.title as title ,t2.fId, t2.image as image ,t2.fName as fName ,t2.fType as fType
         from (select data_TBL.ID as id ,data_TBL.INT_STATUS as status,data_TBL.int_TYPE as type , data_TBL.TXT_TITLE as title ,data_TBL.dat_trans_date as cDate from data_TBL  
         ORDER BY  dat_trans_date DESC ) t1,
         (select int_data_id as fId ,int_category as category ,txt_attach_type as fType,txt_filename as fName,blob_file as image from data_attach_tbl
         where  int_category=1 and ROWNUM=1 and data_attach_tbl.int_data_id = id) t2
         where 
          t1.type = 11
         AND t1.status >= 1
         and ROWNUM <=6

условия запроса:

  1. результат должен быть упорядочен desc
  2. для каждой строки в t1 выбрать одну строку из t2 (data_attach_tbl.int_data_id = id)
  3. 6строки являются окончательным результатом

sample

t1     id     date            vac_title 
       1      15/10/2018      test 1
       2      20/10/2018      test 2
       3      21/10/2018      test 3
       4      22/10/2018      test 4
       5      23/10/2018      test 5

t2     id      t1_Id        file       category
       1         2          image 1      1
       2         2          image 5      1
       3         4          image 10     1
       4         4          text file    2
       5         4          image 3      1
       6         5          image 2      1

результат должен быть

      t1_id   date            vac_title     file
       5      23/10/2018      test 5       image 2
       4      22/10/2018      test 4       image 10
       2      20/10/2018      test 2       image 5

упорядоченным результатом по дате и получить первую строку из t2, которая соответствует иcategory = 1

второй оператор выбора в предложении from не может найти связанную строку, которая соответствует id

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

только что нашел решение для моей проблемы, я хотел бы, чтобы это было кому-нибудь полезно.

SELECT
t1.title AS title,
t2.int_data_id,
t2.blob_file AS image,
t2.txt_attach_name AS fname,
t2.txt_attach_type AS ftype,
t1.cdate,
t1.id AS aid
FROM
    (
        SELECT
            data_tbl.id AS id,
            data_tbl.int_status AS status,
            data_tbl.int_type AS type,
            data_tbl.txt_title AS title,
            data_tbl.dat_trans_date AS cdate
        FROM
            data_tbl
        ORDER BY
            dat_trans_date DESC
    ) t1
    INNER JOIN (
        SELECT
            id,
            int_data_id,
            int_category,
            txt_attach_name,
            blob_file,
            txt_attach_type,
            rownumber
        FROM
            (
                SELECT
                    id,
                    int_data_id,
                    int_category,
                    txt_attach_name,
                    txt_attach_type,
                    blob_file,
                    ROW_NUMBER() OVER(
                        PARTITION BY int_data_id
                        ORDER BY
                            int_data_id DESC
                    ) AS rownumber
                FROM
                    data_attach_tbl
                WHERE
                    int_category = 1
            ) d
        WHERE
            d.rownumber = 1
        ORDER BY
            int_data_id DESC
    ) t2 ON t1.id = t2.int_data_id
            WHERE t1.type = 11
            AND t1.status >= 1;
0 голосов
/ 14 февраля 2019

Я думаю, что-то вроде этого должно получить результат:

SELECT t1.id as id , t1.title as title ,t2.fId, t2.image as image ,t2.fName as fName, t2.fType as fType
FROM (SELECT i1.id , i1.title, MIN(i2.Id)  as minID -- t2 primary key field
    FROM data_TBL i1
    INNER JOIN data_attach_tbl i2 on i1.id = i2.int_data_id  -- t1 foreign key field in t2
    WHERE i2.int_category = 1
    GROUP BY i1.id ) t1
INNER JOIN data_attach_tbl t2 on t1.minID = t2.Id -- t2 primary key field
ORDER BY t1.date desc;

Я проигнорировал предложение WHERE для t1 для типа, статуса и ROWNUM, поскольку вы их не упомянули, если они вам нужны, они должны быть простымичтобы добавить их обратно во внутренний запрос.

Примечание. Я не проверял это в Oracle, но это стандартный SQL, поэтому, надеюсь, все будет в порядке.

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