我们需要选择仅使用连接到机器的标签的测试。是“WHERE(subquery)IN(subquery)”可能吗?
标签是多对多来测试。 (TagTest关联表)
标签对于机器来说是多对多的。 (TagMachine关联表)
实例:
如果测试具有标签[A,B,C]和机器具有[A,B,d]测试不应被选择,因为其标签不是机器标签的子集。
如果测试包含标签[A,B]且机器有[A,B,D],则应包含测试。
如果一个测试没有标签,应该总是包含它。
事情是这样的结构应该工作:
SELECT *
FROM Test te
WHERE
(SELECT tt.tagId
FROM TagTest tt
WHERE tt.testId = te.Id)
IN
(SELECT tm.tagId
FROM TagMachine tm
WHERE tm.machineId = 123)
不过是这种类型的查询的可能吗?如果不是,如何才能达到预期的结果?
检查['ALL'(https://www.postgresql.org/docs/current/static/functions-subquery.html#FUNCTIONS-SUBQUERY-ALL)运算符。 – zerkms
@zerkms ALL运算符是否也需要左值为标量? – Noozen
你是对的,这是无关紧要的,我只是醒了,还没有准备好有效思考。抱歉。 – zerkms