У меня есть дополнительный выбор в запросе, который выглядит примерно так:
left outer join
(select distinct ID from OTHER_TABLE) as MYJOIN
on BASE_OBJECT.ID = MYJOIN.ID
Это довольно просто. Проверяет, существует ли определенное отношение между основным объектом, к которому запрашивается, и объектом, представленным OTHER_TABLE, в зависимости от того, является ли MYJOIN.ID
нулевым в рассматриваемой строке.
Но теперь требования немного изменились. В OTHER_TABLE
есть еще одна строка, которая может иметь значение 1 или 0, и запрос должен знать, существует ли отношение между первичным для значения 1, а также существует ли оно для значения 0. Очевидные решения это поставить:
left outer join
(select distinct ID, TYPE_VALUE from OTHER_TABLE) as MYJOIN
on BASE_OBJECT.ID = MYJOIN.ID
Но это было бы неправильно, поскольку если объекты 0-типа и 1-типа существуют для одного и того же идентификатора, это увеличит количество строк, возвращаемых запросом, что недопустимо. Так что мне нужен какой-то подвыбор, который будет возвращать 1 строку для каждого отдельного идентификатора со столбцом «1-тип существует» и столбцом «0-тип существует». И я понятия не имею, как кодировать это в SQL.
Например, для следующей таблицы
ID | TYPE_VALUE
_________________
1 | 1
3 | 0
3 | 1
4 | 0
Я бы хотел увидеть такой набор результатов:
ID | HAS_TYPE_0 | HAS_TYPE_1
______________________________
1 | 0 | 1
3 | 1 | 1
4 | 1 | 0
Кто-нибудь знает, как я могу настроить запрос для этого? Надеюсь, с минимумом уродливых хаков?