建構 MINUS 等效式

像 Informix 這種不支援 MINUS 運算子的,建構 MINUS 等效式就很重要。
MINUS 運算子第一個運算元的運算式稱為主查詢
第二個運算元的運算式稱為副查詢


select first_name, second_name from doctor
MINUS
select first_name, second_name from doctor where dept = "surgery"


上式是找出不是外科部的同名同姓醫生。

如上式,select * from doctor 為主查詢,
select * from doctor where id == 3 為副查詢。

一般有兩種建構法,
第一是將副查詢的 WHERE 條件作反向式:

select * from fred
WHERE id != 3;

第二種將副查詢改成投射 rowid 的查詢,令其為 R
並對主查詢加入 rowid NOT IN 副查詢的條件式:

select * from doctor
WHERE rowid NOT IN (select rowid from fred where id = 3);

留言

這個網誌中的熱門文章

浴室水龍頭切換拉桿維修

【麵】的倉頡碼

投資現況