Могу ли я использовать функцию существующие в части выбора SQL-запроса? - PullRequest
0 голосов
/ 29 марта 2012

Мне нужно выполнить запрос, в котором одно из возвращенных полей - это да или нет, если в другой таблице есть строка, соответствующая одному из ключевых полей в первой таблице. Похоже, работа по объединению, за исключением того, что вторая таблица - одна ко многим, и мне просто нужно знать, есть ли в вспомогательной таблице ноль или ненулевое количество строк.

Я мог бы сделать что-то вроде этого:

select t1.name, t1.id, (select count(1) from t2 where t1.id=t2.id) from t1 

но я бы хотел, если возможно, избежать составного подзапроса. Мне было сказано, что я могу использовать функцию exist (), но я не вижу, как это сделать в поле выбора.

Кстати, это Sybase 15.

Ответы [ 4 ]

1 голос
/ 29 марта 2012

Вы все еще можете сделать JOIN, примерно так:

SELECT t1.name, t1.id, CASE WHEN t2.id IS NULL THEN 0 ELSE 1 END Existst2
FROM t1 
LEFT JOIN (SELECT id FROM t2 GROUP BY id) t2
ON t1.id = t2.id
0 голосов
/ 30 ноября 2013

Как насчет этого запроса (Работа со всеми базами данных)

select t1.name, t1.id, 'Y' as HasChild
from t1 
where exists ( select 1 from t2 where t2.id = t1.id)
UNION
select t1.name, t1.id, 'N' as HasChild
from t1 
where NOT exists ( select 1 from t2 where t2.id = t1.id)
0 голосов
/ 29 марта 2012

Я просто записываю синтаксис здесь:

if exists (select * from table1 t1 inner join table1 t2 on t1.id = t2.id )
  select * from table2 
0 голосов
/ 29 марта 2012

аааа, я получил его из другой очереди stackoverflow ...

case when exists (select * from t2  where t1.id = t2.id) then 1 else 0  end 
...