Как проверить NULL или недействительно в HQL-запросе

0

У меня есть два разных артефакта таблицы и их классификация. Я хочу получить список артефактов, которые не имеют классификации. Таблица классификации содержит идентификатор (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
Теги:
database
hql

1 ответ

3
Лучший ответ

В SQL вы можете сделать это с помощью

SELECT * FROM Artifact WHERE Id NOT IN (   SELECT Artifact_id FROM Classification WHERE active = 1);

В принципе, вы получаете список всех Идентификаторов Артефакта, которые имеют активную классификацию, а затем получают только Артефакты, которые не входят в этот список, то есть неактивная классификация или вообще не классифицируются.

  • 0
    Большое спасибо Это помогло мне много :)
  • 0
    Вы случайно не знаете, как это будет работать в hql?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню