JQPL: создать новый объект в запросе из нескольких таблиц - PullRequest
1 голос
/ 10 октября 2011

В настоящее время я пытаюсь получить данные с помощью JQPL. Мой запрос выглядит как

SELECT NEW com.test.CustomObject(t1.name, CASE WHEN(t2 IS NOT NULL) THEN true ELSE false END) FROM table1 t1, table2 t2 WHERE t1.id = :id1 AND t2.id = :id2

Конечно, две сущности сами по себе существуют, и запрос одной из них работает. Запросы с фиксированным значением также работают:

SELECT NEW com.test.CustomObject(t1.name, false) FROM table1 t1 WHERE t1.id = :id1

Моя проблема в том, что я не получаю возвращаемого значения, если: id2 имеет несуществующее значение. Вместо того, чтобы давать false конструктору CustomObject, сама строка полностью опускается.

Что еще я мог бы сделать, чтобы получить знания, если у параметра id2 есть строка в table2, чтобы передать это как логическое значение пользовательскому конструктору?

Может быть предоставлена ​​дополнительная информация.

Ответы [ 2 ]

2 голосов
/ 10 октября 2011

Вы должны использовать LEFT (OUTER) JOIN для соединения из таблицы 1 в таблицу 2. Это приведет к тому, что левая часть будет частью результата, даже если правая часть объединения не существует. В таком случае значения, приходящие с правой стороны (например, t2.id), имеют нулевые значения.

Также не имеет смысла устанавливать id в качестве параметра дважды (при условии, что вы хотите t1.id = t2.id). Просто используйте join и установите параметр id один раз.

0 голосов
/ 10 октября 2011

Я мог бы решить проблему с Exsists:

SELECT NEW com.test.CustomObject(t1.name, CASE WHEN EXISTS(SELECT t2.id FROM table2 t2 WHERE t2.id = :id2) THEN true ELSE false END) FROM table1 t1 WHERE t1.id = :id1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...