Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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/8/logging/2.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
Sql 将两个IN语句合并成一个子句?_Sql - Fatal编程技术网

Sql 将两个IN语句合并成一个子句?

Sql 将两个IN语句合并成一个子句?,sql,Sql,这给了我想要的结果,但我有点强迫症,如果可能的话,我希望能够缩短这个时间。贝娄是我想做的,但我不确定运营商是否会工作 WHERE E.CNO IN ( SELECT CNO FROM COURSE WHERE LOWER(CNAME) LIKE LOWER('%WORLD%') AND LOWER(CNAME) LIKE LOWER('%HISTORY%') ) AND

这给了我想要的结果,但我有点强迫症,如果可能的话,我希望能够缩短这个时间。贝娄是我想做的,但我不确定运营商是否会工作

WHERE
    E.CNO IN
    (
    SELECT
        CNO
    FROM
        COURSE
    WHERE
        LOWER(CNAME) LIKE LOWER('%WORLD%')
    AND
        LOWER(CNAME) LIKE LOWER('%HISTORY%')
    )
AND
    C.DNAME IN
    (
    SELECT
        DNAME
    FROM
        COURSE
    WHERE
        LOWER(CNAME) LIKE LOWER('%WORLD%')
    AND
        LOWER(CNAME) LIKE LOWER('%HISTORY%')
    );

有些数据库在子句中支持多个列。但是,您可能会发现可以使用
join
或使用
exists
重写它。下面是一个存在
的示例:

WHERE
    E.CNO, C.DNAME IN
    (
    SELECT
        CNO,
        DNAME
    FROM
        COURSE
    WHERE
        LOWER(CNAME) LIKE LOWER('%WORLD%')
    AND
        LOWER(CNAME) LIKE LOWER('%HISTORY%')
    );

或者您可以使用
加入

where exists (
    select 1
    from course 
    where e.cno = course.cno and 
          c.dname = course.dname and 
          lower(c.cname) like lower('%WORLD%') and
          lower(c.cname) like lower('%HISTORY%')
)
那里不需要子查询

join course on c.dname = course.dname and
           e.cno = course.cno and
           lower(c.cname) like lower('%WORLD%') and 
           lower(c.cname) like lower('%HISTORY%')