希望是一个快速的-我正在努力使一个让声明的工作。
我有一个人名的数据库。顶点具有ident字段和name字段。此查询返回一行--一个名为Bob的人。
select from Person where ident = 1我想返回与这个人同名的所有行。数据中有两个Bobs (作为证据,下面的查询返回两行):
select from Person where name = 'Bob'--我认为以下所有查询都应该返回这两行,但它们都返回0行。它们都涉及到使用let语句的不同方式。有人能看出我做错了什么吗?
select name from Person
let $tmp = (select from Person where ident = 1)
where name = $tmp.name
select name from Person
let $tmp = (select name from Person where ident = 1)
where name = $tmp
select name from Person
let $tmp = 'Bob'
where name = $tmp发布于 2015-10-29 07:18:49
$tmp将是一个记录列表,所以您要求将一个字符串与一个列表进行比较,但它不起作用。你可以做以下的事情;
select name from Person
let $tmp = (select from Person where ident = 1)
where name = first($tmp).name但是,它不会返回Person记录(只返回行名称)。限制$tmp查询也会稍微提高性能。因此,以下几点更好;
select from Person
let $tmp = (select from Person where ident = 1 limit 1)
where name = first($tmp).name但实际上,以这种方式使用let子句是不好的。文档说
LET块包含每次计算记录时要分配的上下文变量列表。
所以*(*应该是)最好完全重新排列你的查询;
select expand($persons_with_name) let
$person_with_ident = first((select from Person where ident = 1 limit 1)),
$persons_with_name = (select from Person where name = $parent.$person_with_ident.name)发布于 2015-10-30 15:16:40
您可以查看名称是否包含在$tmp中
select name from Person
let $tmp = (select name from Person where ident = 1)
where name in $tmp或者如果$tmp包含名称
select name from Person
let $tmp = (select name from Person where ident = 1)
where $tmp contains namehttps://stackoverflow.com/questions/33372929
复制相似问题