[英]Combining two SQL SELECT statements on the same table
我想結合這兩個SQL查詢:
SELECT * FROM "Contracts" WHERE
"productType" = 'RINsell' AND
"clearTime" IS NULL AND
"holdTime" IS NOT NULL
ORDER BY "generationTime";
和
SELECT * FROM "Contracts" WHERE
"productType" = 'RINsell' AND
"clearTime" IS NULL AND
"holdTime" IS NULL
ORDER BY "contractLimitPrice";
當我運行每個語句時,我得到了我想要的結果,我只想順序地得到兩個結果。 我的第一個想法是使用UNION ALL,因為這些選擇將是不相交的,但我發現你不能在ORDER BY
之后使用UNION
。 我搜索了很多,大多數人建議在UNION
之后進行ORDER BY
,但每個查詢都有不同的ORDER BY
條件。
如果你想在第二個結果之前得到第一個查詢的結果,你可以從where子句中刪除holdtime
,並使用order by like
order by
case when holdTime is not null then 0 else 1 end, --first query comes first
case when holdTime is not null --different orders for queries
then generationTime
else contractLimitPrice
end
...但我發現你不能在
ORDER BY
之后使用UNION
。
嗯,你看起來不夠努力:
(
SELECT *
FROM "Contracts"
WHERE "productType" = 'RINsell'
AND "clearTime" IS NULL
AND "holdTime" IS NOT NULL
ORDER BY "generationTime"
)
UNION ALL
)
SELECT *
FROM "Contracts"
WHERE "productType" = 'RINsell'
AND "clearTime" IS NULL
AND "holdTime" IS NULL
ORDER BY "contractLimitPrice"
)
請注意括號。 每個文件:
(
ORDER BY
和LIMIT
可以附加到子表達式中,如果它括在括號中。沒有括號,這些子句將被用於應用於UNION
的結果,而不是它的右側輸入表達式。)
密切相關的答案:
對幾個查詢的結果進行求和,然后在SQL中找到前5個
旁白 :我真的會擺脫那些CaMeL案例標識符 。 使用Postgres中的全小寫法律標識符,您的生活將變得更加輕松。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.