diff --git a/src/query/builder.js b/src/query/builder.js index ebe3392a6a..4e91b5c644 100644 --- a/src/query/builder.js +++ b/src/query/builder.js @@ -176,7 +176,11 @@ assign(Builder.prototype, { } else if (joinType === 'raw') { join = new JoinClause(this.client.raw(table, first), 'raw'); } else { - join = new JoinClause(table, joinType, schema); + join = new JoinClause( + table, + joinType, + table instanceof Builder ? undefined : schema + ); if (arguments.length > 1) { join.on.apply(join, toArray(arguments).slice(1)); } diff --git a/test/unit/query/builder.js b/test/unit/query/builder.js index dcf99e56a9..10eedd4c2e 100644 --- a/test/unit/query/builder.js +++ b/test/unit/query/builder.js @@ -8236,4 +8236,35 @@ describe('QueryBuilder', function() { oracledb: 'select 0', }); }); + + it('join with subquery using .withSchema', function() { + testsql( + qb() + .from('departments') + .withSchema('foo') + .join( + qb() + .from('trainees') + .withSchema('foo') + .groupBy('department_id') + .select('department_id', raw('count(*)')) + .as('trainee_cnts'), + 'trainee_cnts.department_id', + 'departments.id' + ) + .select('departments.*', 'trainee_cnts.count as trainee_cnt'), + { + pg: + 'select "departments".*, "trainee_cnts"."count" as "trainee_cnt" from "foo"."departments" inner join (select "department_id", count(*) from "foo"."trainees" group by "department_id") as "trainee_cnts" on "trainee_cnts"."department_id" = "departments"."id"', + mysql: + 'select `departments`.*, `trainee_cnts`.`count` as `trainee_cnt` from `foo`.`departments` inner join (select `department_id`, count(*) from `foo`.`trainees` group by `department_id`) as `trainee_cnts` on `trainee_cnts`.`department_id` = `departments`.`id`', + mssql: + 'select [departments].*, [trainee_cnts].[count] as [trainee_cnt] from [foo].[departments] inner join (select [department_id], count(*) from [foo].[trainees] group by [department_id]) as [trainee_cnts] on [trainee_cnts].[department_id] = [departments].[id]', + 'pg-redshift': + 'select "departments".*, "trainee_cnts"."count" as "trainee_cnt" from "foo"."departments" inner join (select "department_id", count(*) from "foo"."trainees" group by "department_id") as "trainee_cnts" on "trainee_cnts"."department_id" = "departments"."id"', + oracledb: + 'select "departments".*, "trainee_cnts"."count" "trainee_cnt" from "foo"."departments" inner join (select "department_id", count(*) from "foo"."trainees" group by "department_id") "trainee_cnts" on "trainee_cnts"."department_id" = "departments"."id"', + } + ); + }); });