feat: Enhance MasterDetailExcelService with table alias for JOIN operations

- Added a new property `tableAlias` to distinguish between master ("m") and detail ("d") tables during JOIN operations.
- Updated the SELECT clause to include the appropriate table alias for master and detail tables.
- Improved the entity join clause construction to utilize the new table alias, ensuring clarity in SQL queries.
This commit is contained in:
kjs
2026-02-10 11:38:02 +09:00
parent 30ee36f881
commit 219f7724e7
6 changed files with 226 additions and 42 deletions

View File

@@ -310,6 +310,7 @@ class MasterDetailExcelService {
sourceColumn: string;
alias: string;
displayColumn: string;
tableAlias: string; // "m" (마스터) 또는 "d" (디테일) - JOIN 시 소스 테이블 구분
}> = [];
// SELECT 절 구성
@@ -332,6 +333,7 @@ class MasterDetailExcelService {
sourceColumn: fkColumn.sourceColumn,
alias,
displayColumn,
tableAlias: "m", // 마스터 테이블에서 조인
});
selectParts.push(`${alias}."${displayColumn}" AS "${col.name}"`);
} else {
@@ -360,6 +362,7 @@ class MasterDetailExcelService {
sourceColumn: fkColumn.sourceColumn,
alias,
displayColumn,
tableAlias: "d", // 디테일 테이블에서 조인
});
selectParts.push(`${alias}."${displayColumn}" AS "${col.name}"`);
} else {
@@ -373,9 +376,9 @@ class MasterDetailExcelService {
const selectClause = selectParts.join(", ");
// 엔티티 조인 절 구성
// 엔티티 조인 절 구성 (마스터/디테일 테이블 alias 구분)
const entityJoinClauses = entityJoins.map(ej =>
`LEFT JOIN "${ej.refTable}" ${ej.alias} ON m."${ej.sourceColumn}" = ${ej.alias}."${ej.refColumn}"`
`LEFT JOIN "${ej.refTable}" ${ej.alias} ON ${ej.tableAlias}."${ej.sourceColumn}" = ${ej.alias}."${ej.refColumn}"`
).join("\n ");
// WHERE 절 구성