Помогите написать запрос.

Курильщик
Дата: 27.02.2007 11:55:57
есть 2 таблицы

таблица1 имеет поля ID, NAME
таблица2 имеет поле ID

нужно выбрать из таблицы1 все записи в которых таблица1.ID = таблица2.ID если количество записей в таблицы2 >0 иначе все записи из таблица1
Курильщик
Дата: 27.02.2007 11:59:38
в голову пока приходит сделать это на pl/sql и возвращать курсор
dmidek
Дата: 27.02.2007 12:05:22
select *
  from tab1
 where id in CASE WHEN EXISTS (select null from tab2) THEN (select id
                                                              from tab2) ELSE id END
Elic
Дата: 27.02.2007 12:11:39
dmidek
THEN (select id from tab2) ELSE id END
TOO_MANY_ROWS
Wladislaw
Дата: 27.02.2007 12:13:15
select t1.id, t1.name from t1
minus
select t1.id,t1.name from t1 inner join t2 on t1.id<>t2.id
dmidek
Дата: 27.02.2007 12:15:42
Elic
dmidek
THEN (select id from tab2) ELSE id END
TOO_MANY_ROWS


select *
  from tab1
 where id in CASE WHEN EXISTS (select null from tab2) THEN (select id
                                                              from tab2 where id = tab1.id) ELSE id END
Хм..
Дата: 27.02.2007 12:20:01
ну или просто
select *
  from tab1
 where ((select count(*) from tab2) =0
         or id in (select id from tab2))
Elic
Дата: 27.02.2007 12:20:46
dmidek
THEN (select id from tab2 where id = tab1.id) ELSE
А кто сказал, что tab2.id unique? :)
Курильщик
Дата: 27.02.2007 13:00:40
> кто сказал, что tab2.id unique? :)
говорю уникальное. :)
Mikst
Дата: 27.02.2007 13:05:29
А так?

SELECT t.*
  FROM t,
       (SELECT *
          FROM t2
        UNION ALL
        SELECT null
          FROM DUAL) t2
 WHERE t.ID = CASE
                WHEN exists (SELECT null
                            FROM t2)
                   THEN t2.ID
                ELSE t.ID
             END;