检查所有表中是否有列,如果有列,则打印表名-kdb

检查所有表中是否有列,如果有列,则打印表名-kdb,kdb,Kdb,在当前名称空间中,我们有3个表,下面有列 q)t:([] a:`a`b`c; b:1 2 3); q)s:([] a:`a`b`c; b:1 2 3); q)z:([] z:`a`b`c; b:1 2 3); 现在我们要搜索并打印包含列a的所有表 Expected output: `a`s 我有两个丑陋的解决方案,有些奏效 q){$[`a in cols x;x;]} each tables[]; q){(enlist x) where enlist(`a in cols x)}each t

在当前名称空间中,我们有3个表,下面有列

q)t:([] a:`a`b`c; b:1 2 3);
q)s:([] a:`a`b`c; b:1 2 3);
q)z:([] z:`a`b`c; b:1 2 3);
现在我们要搜索并打印包含列a的所有表

Expected output: `a`s
我有两个丑陋的解决方案,有些奏效

q){$[`a in cols x;x;]} each tables[];
q){(enlist x) where enlist(`a in cols x)}each tables[];
但是要寻找更好的最佳解决方案。

最好在中使用带有
的副词:

q)tables[] where `a in/: cols each tables[]
`s`t

如果这是您希望参数化并再次使用的类型,则以下投影可能对您有用:

f:{[t;c]c!t@/:where each flip(c,:())in/:cols each t}[tables[]];
此函数产生以下输出

q)f`a
a| s t
q)f`a`b
a| `s`t
b| `s`t`z
因此,它将列名映射到包含该列的表列表。 这种映射通常比使用简单列表更为有利,因为它允许快速、易读的索引

q)coldict:f`a`b
q)coldict[`a]
`s`t