0

我正在选择文件,但是当名称以某个序列开头时,我希望它也有一个像这样的字段

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'

我想把它们都变成一个查询,如果可能的话?

4

2 回答 2

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'
      ));
于 2013-09-01T22:15:50.327 回答
0

如果您使用 a 将两者结合起来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.

于 2013-09-01T22:42:36.110 回答