Я использую этот запрос, чтобы получить первую строку из 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
условия запроса:
образец
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, которая соответствует и категории = 1
второй оператор выбора в предложении from не может найти связанную строку, которая соответствует идентификатору
Спасибо
вы правы @PhilS .. отредактировал это. Благодарность


Я думаю, что что-то вроде этого должно получить результат:
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, поэтому, надеюсь, все будет в порядке.
в чем проблема?
Понял одну проблему. Я использовал внешний ключ (идентификатор t1), когда должен был использовать идентификатор для t2. Я обновил SQL. Это исправит?
группировать по столбцу blob. Я просто не понимал, что должен упомянуть использование столбца изображения blob. простите за это
только что нашел решение для моей проблемы, я хочу, чтобы это было полезно для кого-то.
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;
Я не понимаю, как вы вернете строку для t1_id = 1, так как ни одна строка в t2 не имеет t1_id = 1 Верны ли данные?