,我的查詢是沒有條款,有沒有我試圖排除之前已經見過的ID號有更好的方式
select id from table1 where date1 >= eDate1 and date1 <= eDate2 and zId = 256
and id no in
(select id from table1 where date1 < eDate1 and zId = 256)
MonetDB。
有沒有更好的方法,我試圖簡單地排除在所選日期範圍之前在區域中看到的任何id號?
謝謝。
,我的查詢是沒有條款,有沒有我試圖排除之前已經見過的ID號有更好的方式
select id from table1 where date1 >= eDate1 and date1 <= eDate2 and zId = 256
and id no in
(select id from table1 where date1 < eDate1 and zId = 256)
MonetDB。
有沒有更好的方法,我試圖簡單地排除在所選日期範圍之前在區域中看到的任何id號?
謝謝。
一些數據庫優化器可以處理一個大的id列表,其他的處理不好。
最好的方法是使用一個左連接和失誤過濾器:
select a.id
from table1 a
left join table1 b on a.id = b.id and b.date1 < eDate1
where a.date1 between eDate1 and eDate2
and zId = 256
and b.id is null
我剛剛讀到這裏,它聲明'這就是爲什麼LEFT JOIN/IS NULL查詢需要810毫秒,或3倍於NOT EXISTS/NOT IN查詢。「 https://explainextended.com/2009/09/15/not-in-vs-not-exists-vs-left-join-is-null-sql-server/ – flavour404
@ flavour404取決於列表的大小。如果它很大,這個查詢應該更快。另外請注意,您需要'id'列上的索引 – Bohemian
哪個DBMS您正在使用? –
「更好的辦法」?你的問題不清楚。 –
性能更好,查詢速度更快。對不起,戈登並不清楚。 – flavour404