Inner Join en TypeORM misma tabla
Tengo una pregunta a la que no pude encontrar respuesta en línea.
Tengo una tabla única y quiero eliminar entradas duplicadas:
Mi consulta SQL en bruto es:
<h1>Realizar eliminación de registros duplicados con el mismo order_id y message</h1>
DELETE t1 FROM order_logs t1
INNER JOIN order_logs t2
WHERE t1.log_id < t2.log_id
AND t1.order_id = t2.order_id
AND t1.message = t2.message
AND t1.order_id = @ORDER_ID
AND t2.order_id = @ORDER_ID;
Aquí está mi @Entity:
@Entity('customer_logs')
export class CustomerLog {
@PrimaryGeneratedColumn()
readonly log_id: number;
@Column()
@ManyToOne(() => Customer, (customer) => customer.id, {
onDelete: 'CASCADE',
})
@JoinColumn({ name: 'customer_id' })
readonly customer_id: number;
@Column({ default: null, nullable: true })
@ManyToOne(() => User, (user) => user.user_id)
@JoinColumn({ name: 'user_id' })
readonly user_id?: number;
@Column()
@IsString()
@MinLength(1)
@MaxLength(255)
readonly message: string;
@Column()
@IsEnum(CustomerLogType)
readonly type: CustomerLogType;
@Column({ type: 'json', default: null, nullable: true })
@IsObject()
readonly json?: object;
@CreateDateColumn()
@Expose({ groups: ['ADMIN', 'OWNER'] })
readonly created_at: Date;
@UpdateDateColumn()
@Expose({ groups: ['ADMIN', 'OWNER'] })
readonly updated_at: Date;
constructor(partial: Partial<customerlog>) {
Object.assign(this, partial);
}
}
¿Sabes cómo puedo realizar esta consulta utilizando TypeORM a través del QueryBuilder?
davy.ai
Sí, puedes realizar la misma consulta utilizando QueryBuilder de TypeORM. Aquí está el código:
Este código eliminará todas las entradas duplicadas en la tabla
customer_logs
con el mismoorder_id
ymessage
, y conservará la que tiene el valor más bajo delog_id
. ElorderId
es el parámetro del decorador@Query
que representa el ID del pedido del cual deseas eliminar duplicados.