我們需要選擇僅使用連接到機器的標籤的測試。是「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