2013-09-01 3 views
0

я выбор файлов, но когда имя начинается с определенной последовательностью я хочу, чтобы также иметь определенное поле, как этогоесли заявление в SQL и

select filename from filestable where 
filename like '%abc_%' and not filename like '%abc2%' 

// здесь я не хотите использовать экранирующий символ и просто пропустить abc2 имя файла, а затем создать второй запрос для него (своего рода замедленный) сог повторяю запрос и объединение результатом

select filename from filestable 
    inner join filetype on filetype.id = filename.id 
    where 
    filename like '%abc2%' 
    and filetype.type = 'mpeg' 

Я хочу, чтобы сделать их обоих в одном запросе с и, если возможно?

+0

Но я не понимаю - почему вы не делаете СОЮЗ прямо в первом запросе? – Shomz

+0

Я новичок, не уверен, что я ожидал, что есть что-то прямое, как если бы это было тогда filetype.type = 'mpeg' – trackmeifUcan

+0

Я действительно не понимаю, чего вы пытаетесь достичь на высоком уровне, не могли бы вы попытаться объяснить это бит чище? Как с некоторым примером ввода и вывода? –

ответ

0

Если вы объединяете два используя join, то я думаю, что это эквивалентно запросу:

select distinct ft.filename 
from filestable ft left join 
    filetype fty 
    on fty.id = ft.id 
where (ft.filename like '%abc_%' and not ft.filename like '%abc2%') or 
     (ft.filename like '%abc2%' and fty.type = 'mpeg'); 

Если вы знаете, что нет никаких дубликатов в filetype для данного filename, тогда просто используйте select вместо select distinct.

+0

это, похоже, работает, спасибо! – trackmeifUcan

+0

Я думаю, это также самый быстрый по сравнению с другими решениями? они кажутся длиннее в тексте: P – trackmeifUcan

0

Попробуйте это:

SELECT filename FROM filestable 
WHERE filename LIKE '%abc_%' 
     AND (filename NOT LIKE '%abc2%' 
      OR EXISTS (
       SELECT 1 FROM filetype 
       WHERE filetype.id = filename.id 
         AND filetype.type = 'mpeg' 
    ));