2017-05-17 38 views
1

我在我的Postgresql數據庫版本9.6上運行查詢。 我是從具有查詢200頁的URL的表image_urls選擇網址:爲什麼選擇中的數據操作會導致查詢結果集的大小減小?

select url from image_urls limit 10;

該查詢與10頁的URL返回正確的輸出。 但是,我想選擇具有http url而不是https url的圖片網址。 所以,我試圖將網址正則表達式匹配,並檢查通過正則表達式匹配與查詢的幫助下返回的文本陣列的尺寸:

select array_length(regexp_matches(url, '^http(?!s)', 'g'), 1) from image_urls limit 10;

上面的查詢返航0的結果。

我無法理解如何在結果數據集中選擇列的操作減少數據集的大小,即。無論結果如何,至少有10行應該返回。 ?

回答

0

如果有至少一個匹配,regexp_matches的結果是數組:

t=# select regexp_matches(tablename, '^pg(?!s)', 'g') from pg_tables limit 1; 
regexp_matches 
---------------- 
{pg} 
(1 row) 

,如果你沒有比賽 - the result is not empty array, but no rows

功能可以不返回行,一列,或多個行(見下面的克 標誌)

t=# select regexp_matches(tablename, '^http(?!s)', 'g') from pg_tables; 
regexp_matches 
---------------- 
(0 rows) 

,最後array_length無行沒有給出行:

t=# with no_rows_returned as (select ARRAY[1,2] aa from pg_tables where false) 
select array_length(aa,1) from no_rows_returned; 
array_length 
-------------- 
(0 rows) 

而且這種行爲也不例外,沒有行另一個例子,而不WHERE條款:

t=# select json_agg(tablename) filter (where tablename = 'no such table') from pg_tables; 
json_agg 
---------- 

(1 row) 

t=# select unnest(array_remove(array_remove(ARRAY[1,2],1),2)); 
unnest 
-------- 
(0 rows) 
相關問題