Quiero optimizar mi subconsulta. Del documento mysql que encontré.
SELECT * FROM t1 WHERE t1.column1 IN ( SELECT column1 FROM t2 ORDER BY column1 ); SELECT * FROM t1 WHERE t1.column1 IN ( SELECT DISTINCT column1 FROM t2 ); SELECT * FROM t1 WHERE EXISTS ( SELECT * FROM t2 LIMIT 1 );Pude lograr este formato usando este código js de objeción.
Person.query() .from( Person.query() .select( 'persons.name as persons_name', 'persons.disclaimer as persons_disclaimer', 'persons.id as persons_id' ) .as('optimised') .limit(40) ) .select('optimised.*') .select((qb) => { qb.select(raw(`sum(act.count)`)) .from('activity as act') .where('act.p_id', '=', 'optimised.persons_id') .as('actCountSum'); }) .select((qb) => { qb.select(raw(`count(*)`)) .from('activity as act') .where('act.p_id', '=', 'optimised.persons_id') .as('actCount'); }) .debug();Pero el problema es que obtengo nulo y 0 respectivamente porque en la cláusula where pasa Optimized.persons_id como una cadena.
¿Alguna solución?
El tercero se ve simplemente mal.
Prueba esto:
SELECT * FROM t1 WHERE EXISTS ( SELECT 1 FROM t2 WHERE t1.column1 = t2.column1 );Si no hay duplicados, simplemente hazlo.
SELECT t1.* FROM t1 JOIN t2 ON t1.column1 = t2.column1