2013-08-19 9 views
3

Мне нужно выбрать некоторые строки из таблицы 1, если скажем, если значение найдено в таблице 2. Поэтому я хочу проверить, будет ли значение (я буду вводить значение из командной строки) находится в таблице 2, а затем выберите строки из таблицы 1, если я не хочу выбирать строки из другой таблицы. Я попробовал CASE, но из того, что получил, работает только в том случае, если вы хотите проверить значение внутри одной таблицы. Есть идеи?Выберите из таблицы, если запись найдена в другой таблице

ответ

6

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

-- If value is found in table2, select from table1 
select * -- <- use padding if necessary 
    from table1 
where exists (select 1 
       from table2 
       where myField = value) 

union all 

-- If value is not found in table2, select from another_Table 
select * -- <- use padding if necessary 
    from another_Table 
where not exists (select 1 
        from table2 
        where myField = value) 
+0

Спасибо, но что делать, если таблицы имеют разные номера и/или типы столбцов? –

+0

@Albano Vito: использовать прописку (добавить нули), лить, например: select id, null, comments ... union all select id, name, null –

+0

Да, спасибо большое :) –

1

Этот запрос будет выбрать из Table1 если :id существует в Table3, и от Table2 иначе:

select * 
from Table1 
where exists 
     (
     select * 
     from Table3 
     where id = :id 
     ) 
union all 
select * 
from Table2 
where not exists 
     (
     select * 
     from Table3 
     where id = :id 
     ) 
+0

Спасибо за ответ, но Table1 и Table2 не имеют одинаковые номера или типы столбцов. Я хочу выбрать один из них самостоятельно. –

Смежные вопросы