在SQL語句中,Where 與having 區別大家並不陌生,同是用於條件篩選,WHERE作用於表中實際存在的列,HAVING作用於虛擬列或者子查詢的列。不贅述。
昨天遇到一個業務需求,需要同時用WHERE篩選現有表中的列,同時需要對一個函數返回值進行進行條件限制。莫名的報錯,然后baidu,google了一下,關鍵詞where,having,同用;然后一大堆全是講它們分別作用於什么,至於它們能不能同用的問題一個也沒有。
然后今天早上過來,莫名的又可以了。它們可以同用。
運行結果:
但是where 必須放在having之前,而不是相反,不然就會報錯。
同樣的,order by 也可以用於虛擬列或者子查詢的列進行排序。
測試環境為mysql,ORACLE沒有測過。可能因為這是個無關緊要的知識點,所以網上才沒有這方面的資料。但由於昨天的報錯,決定還是記錄下來。
PS:完全可以通過子查詢來完成。