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