Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL和SQL中的if语句_Mysql_Sql_Database - Fatal编程技术网

Mysql SQL和SQL中的if语句

Mysql SQL和SQL中的if语句,mysql,sql,database,Mysql,Sql,Database,我正在选择文件,但当名称以某个序列开头时,我希望它也有一个这样的特定字段 select filename from filestable where filename like '%abc_%' and not filename like '%abc2%' //这里我不想使用转义字符,只想跳过abc2文件名,然后为它创建第二个查询(有点迟钝),因为我重复查询并合并结果 select filename from filestable inner join filetype

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

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'
我想把它们都变成一个问题,如果可能的话

试试这个:

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'
      ));

如果您使用一个
连接将两者结合起来
,那么我认为这是等效的查询:

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');

如果您知道给定的
文件名
文件类型中没有重复项,那么只需使用
select
而不是
select distinct

,但我不明白-为什么不在第一个查询中就在那里执行UNION?我是新的,我不确定我是否希望有直接的东西,如果是这样的话,那么filetype.type='mpeg'我真的不明白你想在高层次上实现什么,你能解释清楚一点吗?比如一些输入和输出示例?我想这也是与其他解决方案相比最快的?至少在文本中它们看起来更长:P