因為你的例子是要過濾手上的資料(a,b,x,y)與目前資料表f1的比對
我用下列語法簡單表示概念
如果實務上是有大筆資料要比對, 我會先匯入一個暫存table再處理.
<pre class="c" name="code">
select a.C1
from
(
select [C1]='a'
union
select 'b'
union
select 'x'
union
select 'y'
) a
where a.C1 not in (select f1 from letter)
您的方法可行,謝謝!
但另一法為:
select t.f1
from (
select 'a' as f1
union all
select 'b'
union all
select 'x'
union all
select 'y'
) t
left join letter t2
on t.f1 = t2.f1
where t2.f1 is null
(大筆資料時)不知何種較快?
建議不要用union all
因為如果有2個 'a', union all 會有2筆'a'
你的例子, 主要目的應該是找出不在 letter的資料. 直接用union 會有distinct的效果.
我之前的經驗, 用join的方法比較快.
實際上, 還是用query analyzer分析後再決定比較保險.
symis提到:
select * from letter where ('a','b','x','y') not in f1
試試:
SELECT * FROM letter WHERE ('a' NOT IN f1) OR ('b' NOT IN f1) OR ('x' NOT IN f1) OR ('x' NOT IN f1)