2016-02-13 82 views
1
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%') 
    ); 

這給了我正在尋找的結果,但我有點強迫症,並希望能夠縮短這個如果可能的話。貝婁是我想要做的,但我不確定運營商是否會工作。將兩個IN語句合併爲一個子句?

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

回答

2

某些數據庫支持in子句中的多個列。但是,您可能會發現可以使用join或使用exists來重寫它。下面是一個例子與exists

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

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

無需子查詢那裏。

+0

謝謝!真的喜歡加入代碼的流程。 – defaultNINJA

相關問題