我有"行"表和相关的"单元格"表(OneToMany)。
我必须选择文档的所有行。使左连接带来每行的所有单元格。
Row_id Cell
1 1A
1 1B
1 1C
1 1D
2 2A
2 2B
2 2C
2 2D
假设每个单元格都有关系的列索引,则列表也存在。(A第一列,B第二列等)
A B C D
1 - [1A, 1B, 1C, 1D]
2 - [2A, 2B, 2C, 2D]
如果用户有此文档并希望按 A 列排序,那么 JPA/Oracle 中的最佳方法是什么?我必须在给定的列索引中按单元格对物理行组进行排序。
例如,第一列的 Desc
Row_id Cell
2 2A
2 2B
2 2C
2 2D
1 1A
1 1B
1 1C
1 1D
或者按行 ID 分组,并按给定列索引的选定单元格排序。
然后我已经订购了行 ID 列表.但是有没有一种保证的方法可以按指定的row_id顺序获取与单元格连接的所有行?
目前,这对我来说是最好的解决方案。首先,我选择要排序的列,排序paginate.take row_id然后在主查询中选择与此row_ids相关的所有字段数据,因为in子句不保持顺序,没有保证。
SELECT doc_row.id ,
doc_row.delimiter_delimiter_id,
user_username ,
doc_row.isdraft,
LISTAGG(NVL(value, ''), ',') WITHIN GROUP (
ORDER BY col_index) AS cells
FROM data
LEFT JOIN field
ON field.field_id = field_field_id
LEFT JOIN doc_row
ON doc_row.id = data.row_id
WHERE row_id IN
(SELECT q
FROM
(SELECT my_query.row_id q,
rownum rn
FROM
(SELECT row_id
FROM data
LEFT JOIN doc_row
ON data.row_id = doc_row.id
WHERE delimiter_delimiter_id IN (1)
AND field_field_id = (3)
ORDER BY to_date(value,'DD/MM/YYYY')
) my_query
WHERE rownum <= (2000)
)
WHERE rn >= (0)
)
GROUP BY doc_row.id ,
delimiter_delimiter_id,
user_username,
isdraft
ORDER BY to_date(REGEXP_SUBSTR(cells, '[^,]+',1,(3)),'DD/MM/YYYY')