javascript对象上的复杂SQL查询

luk*_*89x 5 javascript sql

我有以下JS对象:

var groups = [{id="4", name="abcd", id_group="1"},
              {id="5", name="efgh", id_group="1"},
              {id="6", name="ijkl", id_group="1"},
              {id="4", name="abcd", id_group="2"},
              {id="7", name="mnop", id_group="2"}]
Run Code Online (Sandbox Code Playgroud)

我需要在上述对象上执行此SQL查询:

select id_group from groups where id in (4,7) 
group by id_group having count(distinct id) = 2
Run Code Online (Sandbox Code Playgroud)

结果应为:

id_group="2"
Run Code Online (Sandbox Code Playgroud)

因为只有该组包含在查询中使用的两个ID。

我找到了有关SQLikeJSLINQ的信息,但是我在哪里以及表达式时遇到了问题。是否有可能使用SQL-JS库或JS / jQuery本身(编写函数等)在javascript对象上执行此类查询?

age*_*hun 5

Alasql JavaScript SQL 库是专门为此类任务设计的:

<script src="alasql.min.js"></script>
<script>
    var groups = [{id:4, name:"abcd", id_group:"1"},
          {id:5, name:"efgh", id_group:"1"},
          {id:6, name:"ijkl", id_group:"1"},
          {id:4, name:"abcd", id_group:"2"},
          {id:7, name:"mnop", id_group:"2"}];

    var res = alasql('select id_group, count(id) as cnt from ? \
        where id in (4,7) group by id_group having cnt = 2',[groups]); 
</script>
Run Code Online (Sandbox Code Playgroud)

你可以试试这个例子 in jsFiddle.

我修改了一点 SQL 表达式,因为 Alasql 不支持 HAVING 子句中的聚合函数(如 COUNT、SUM、MAX、MIN)。