是否可以在Sequelize JOIN中进行子查询?

时间:2019-06-12 01:29:18

标签: javascript node.js postgresql orm sequelize.js

我写了一个Postgres查询,它做了我想要达到的目的,我想知道用Sequelize是否可以以更好的方式进行操作,或者我是否最好只使用原始查询。

我见过this answer,但是它无法解决我的问题,因为在查询该字段之前,我不知道该字段的site_id。

给出用户的ID,我想获取他的所有字段,如果他有权访问站点,他可以访问该站点的子级,如果他有权访问客户端,则可以访问所有站点,以及所有这些网站的字段。

这是我的数据库架构,以供您参考。使用SqlDBM制成。 Database Schema

  • 字段属于站点
  • 网站属于客户

用户可以访问字段,站点或客户端,具体取决于UserAccessMap表,该表确定他们可以访问的级别。

SQL查询:

SELECT id, name
    FROM public."Field" AS field
        INNER JOIN public."UserAccessMap" AS userAccessMap
            ON userAccessMap.entity_id = field.id
            OR userAccessMap.entity_id = field.site_id
            OR userAccessMap.entity_id = (SELECT client_id FROM public."Site" WHERE id = field.site_id)
    WHERE  userAccessMap.user_id = 'Some User ID';

有问题的查询位于INNER JOIN的最后一个OR子句中,我需要弄清楚客户端ID是什么,但是我只能通过从字段站点ID中查询站点来获得该ID。

0 个答案:

没有答案