У меня есть два разных артефакта таблицы и их классификация. Я хочу получить список артефактов, которые не имеют классификации. Таблица классификации содержит идентификатор (PK), Artifact_Id (внешний ключ), Active (0/1), в то время как таблица артефактов содержит идентификатор (PK), имя. Каждый артефакт может иметь много классификаций. Я хочу вернуть список артефактов, если для него нет никакой классификации (например, в классификации не содержится этого артефакта или когда артефакт имеет классификацию, но все экземпляры не активны (0))
Например
Artifact
Id Name
1 xyz
2 pqr
3 abc
Classification
Id Artifact_id active
a1 1 0
a2 1 0
a3 1 0
a4 3 0
a5 3 1
В приведенном выше случае артефакт 1 и 2 не имеет классификации, но 3 имеет классификацию, поскольку один экземпляр активен (1). Поэтому я хочу вернуть 1 и 2. Я не уверен, как запросить это. Это то, что я пробовал (не слишком много, хотя и не так)
def list = findAll("from artifact as a full outer join classification as c on a.id=c.artifact_id where active == 0 OR c.aritfact_id is NULL,[max:limit, offset:startPos])
Я также пробовал что-то в sql
select * from ARTIFACT full outer join classification on artifact.id = classification.ARTIFACT_ID where sum(classification.active) == 0 OR classification.aritfact_id is NULL
В SQL вы можете сделать это с помощью
SELECT * FROM Artifact WHERE Id NOT IN ( SELECT Artifact_id FROM Classification WHERE active = 1);
В принципе, вы получаете список всех Идентификаторов Артефакта, которые имеют активную классификацию, а затем получают только Артефакты, которые не входят в этот список, то есть неактивная классификация или вообще не классифицируются.