2015-04-01 41 views
0

嗨,大家好即時如果我改變限制10個或20的結果是不同的
我學習的PostgreSQL我無法弄清楚是什麼問題
是否有postgresql特定的警告?PostgreSQL的變化導致當我玩的偏移,限制使用下面的查詢<br>

WITH RECURSIVE children AS (
     SELECT id, name, 1 AS depth 
     FROM wapi_categories 
     WHERE parentid = 1 AND visible = true 
     UNION ALL 
     SELECT a.id, a.name, depth+1 
     FROM wapi_categories a 
     JOIN children b ON(a.parentid = b.id) 
     WHERE a.visible = true 
     ) SELECT wapi_issues.* FROM (SELECT DISTINCT ON(wapi_issues.publicationid) wapi_issues.* FROM wapi_publications 
           RIGHT JOIN wapi_category_publication ON wapi_category_publication.publication_id = wapi_publications.id RIGHT JOIN (
      SELECT *, 
       max(wapi_issues.issue_identifier) OVER (PARTITION BY wapi_issues.publicationid) max_id FROM wapi_issues WHERE wapi_issues.status = true ORDER BY wapi_issues.issue_identifier DESC 
           ) AS wapi_issues ON wapi_issues.publicationid = wapi_category_publication.publication_id 
           AND wapi_issues.issue_identifier = max_id 
           RIGHT JOIN wapi_issue_files ON wapi_issue_files.issueid = wapi_issues.id WHERE wapi_publications.status = true AND (wapi_category_publication.category_id IN (
      SELECT id FROM children 
     ) OR wapi_category_publication.category_id = 1) AND wapi_issue_files.pdf = true) AS wapi_issues ORDER BY wapi_issues.issue_identifier DESC 
     OFFSET 0 LIMIT 20 

wapi_categories 
------------------ 
id, name, parentid 
------------------ 
1, "Root", 0 
2, "Child 1", 1 
3, "Child 2", 1 

wapi_publication 
------------------ 
id, name, status 
------------------ 
1, "Publication 1", true  
2, "Publication 2", true 

wapi_categories_publication 
------------------ 
id, category_id, publication_id 
------------------ 
1, 2, 1 
1, 3, 2 

wapi_issues 
------------------ 
id, publicationid, title, issue_identifier, status 
------------------ 
1, 1, "Issue 1", 1, true 
2, 1, "Issue 2", 3, true 
3, 2, "Issue 3", 1, true 
4, 2, "Issue 4", 2, true 

wapi_issue_files 
------------------ 
id, issueid, file, status 
------------------ 
1, 1, "file1", true 
2, 1, "file2", true 
3, 2, "file3", true 
4, 2, "file4", true 

預期結果

只要我想wapi_issues.issue_identifier

id, publicationid, title, issue_identifier, status 
------------------ 
3, 1, "Issue 2", 3, true 
4, 2, "Issue 4", 2, true 

我的意思是說的結果是不同的,以獲得不同的wapi_publications和他們最後的問題通過排序

當限制爲10;

id, title 
1, "A" 
2, "B" 
3, "C" 
4, "D" 
5, "E" 
. 
. 
. 

當限制爲20時;

id, title 
2, "B" 
4, "D" 
1, "A" 
5, "E" 
3, "C" 
. 
. 
. 
+0

「*如果我將限制更改爲10或20,結果是不同的*」 - 當然他們是。你只是要求Postgres顯示不同的結果。請添加預期和實際輸出的樣本數據 – 2015-04-01 14:28:35

+0

我的頭腦被炸了。我添加了預期的數據 – 2015-04-01 14:46:34

+0

lol @a_horse_with_no_name我明白你的意思了^^我更新了描述我的意思的問題 – 2015-04-01 18:52:34

回答

1

我結束了BY子句與此

ORDER BY wapi_issues.id ASC, wapi_issues.issue_identifier DESC 

我理解的PostgreSQL需要什麼切換順序明確的分類

0

也許你有多個wapi_issues.issue_identifier,這樣可以防止您的訂購子句創建確定性輸出

+0

因此, wapi_category_publication.category_id IN(SELECT ID從兒童 ) 我得到multipe次行,因爲它屬於多個類別 如何防止呢? – 2015-04-01 18:56:56