考虑一个带有 2 个表的数据库,如下所示。CompanyId是Department表中指向的外键Company。公司名称是唯一的,但部门名称不是。
桌子 :Department
+-------+-----------+-----------+-------------------+
| id | name | CompanyId | phone |
+-------+-----------+-----------+-------------------+
| 1 | Sales | 1 | 214-444-1934 |
| 2 | R&D | 1 | 555-111-1834 |
| 3 | Sales | 2 | 214-222-1734 |
| 4 | Finance | 2 | 817-333-1634 |
| 5 | Sales | 3 | 214-555-1434 |
+-------+-----------+-----------+-------------------+
桌子 :Company
+-------+-----------+
| id | name |
+-------+-----------+
| 1 | Best1 |
| 2 | NewTec |
| 3 | JJA |
+-------+-----------+
我有一个像下面这样的过滤器。当部门名称为空(空)时,这意味着该公司的所有部门 ID 都应包含在结果中,但当有列表时,它应仅包含列出的那些。
[ {
companyName: "Best1",
departmentName: ["Sales", "R&D"]
},
{
companyName: "NewTec",
departmentName: ["Finance"]
} ,
{
companyName: "JJA",
departmentName: null
}
}]
注意:过滤器是动态的(对 API 端点的请求),可能包括数千个公司和部门。
我想要一个 sql 查询来返回所有符合条件的部门 id。对于此示例,结果将是“1,2,4,5”。(返回除 NewTec 销售部门的 id (3) 之外的所有部门 id)
我正在寻找有效的 SQL 和/或 linq 查询来返回结果。我可以遍历公司并为每个单独的部门过滤掉部门,但这意味着对于每个公司来说,将使用 ORM 访问一次数据库。有没有更好的方法来处理这种情况?