我想在postgresql中检查记录是否存在,并且需要以boolean为结果。
注意:我知道if else检查有简单的方法,但我想要的是我列出的查询在knex中的表示。我也知道这很复杂但只是想学习。
我知道查询,你可以在下面看到,
select exists(select 1 from test where id = XYZ);
如何用knex编写这个postgresql查询?
我试过这种方式,但它没有用。
knex.raw(`SELECT exists(${knex(TABLE_NAME).where(CONDITIONS).select('1').toString()})`)
答案 0 :(得分:2)
我在this useful GitHub Knex post中修改了以下代码:
var inner = knex('test').where('id', 'XYZ').limit(1);
var clause = knex.raw(inner).wrap('exists (', ') as result');
knex('test').select(clause).limit(1).then(...);
我认为这应该对应于以下SQL代码:
select exists (select * from test where id = 'XYZ' limit 1) as result
from test
limit 1;
test
上的外部查询是多余的,并不是必需的,但我不知道除了原始查询之外的一种方法是不对Knex中的表运行查询。 LIMIT
语句只表示它将返回单个值。
答案 1 :(得分:2)
您不需要在数据库端进行布尔转换(不会有任何性能差异):
knex('test').select('id').where('id', 'XYZ').then(results => results.length > 0);
如果您真的更喜欢select 1
而不是id
:
knex('test').select(knex.raw('1')).where('id', 'XYZ').then(results => results.length > 0);
蒂姆的答案也很好,更准确地说明了你要做的事情,但它有点复杂。