如何在 Objective JS 中优化子查询?
How to Optimize Subquery in Objection JS?
我想优化我的子查询。从我找到的 mysql 文档中。
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
);
我能够使用此反对 js 代码实现此格式。
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();
但问题是我分别得到 null 和 0,因为在 where 子句上它作为字符串传递 optimised.persons_id。
有什么解决办法吗?
第三个看起来完全不对。
试试这个:
SELECT *
FROM t1
WHERE EXISTS (
SELECT 1
FROM t2
WHERE t1.column1 = t2.column1
);
如果没有重复,那么简单
SELECT t1.*
FROM t1
JOIN t2 ON t1.column1 = t2.column1
我想优化我的子查询。从我找到的 mysql 文档中。
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
);
我能够使用此反对 js 代码实现此格式。
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();
但问题是我分别得到 null 和 0,因为在 where 子句上它作为字符串传递 optimised.persons_id。
有什么解决办法吗?
第三个看起来完全不对。
试试这个:
SELECT *
FROM t1
WHERE EXISTS (
SELECT 1
FROM t2
WHERE t1.column1 = t2.column1
);
如果没有重复,那么简单
SELECT t1.*
FROM t1
JOIN t2 ON t1.column1 = t2.column1