我在Postgresql中遇到了一個'高級'(通過我的標準)查詢的問題,而且我不知道應該如何查找答案(關鍵字等)。我已經查看了Postgresql手冊中的示例並搜索了stackoverflow以獲取類似的線程,但無濟於事...帶有AND/OR/UNION的postgresql查詢
我有兩個表:一個是賬單,另一個是事務,而我想輸出的表包含只有那些比1)更新的交易2)低於或等於特定賬戶上的賬單3)或以現金支付的交易。
這個查詢了這一點,但我想它可以進行優化:如果我可以簡單地增加一個OR
到「acc_int'條件不擾亂別的
((SELECT * FROM transactions
WHERE amount = to_number('$bill_amount','99999999D99')
AND acc_int = 'cash'
AND date > to_date('$bill_date', 'YYYY-MM-DD'))
UNION
(SELECT * FROM transactions
WHERE amount = to_number('$bill_amount','99999999D99')
AND acc_int = 'xxx-xxxxxxx-xx'
AND date > to_date('$bill_date', 'YYYY-MM-DD'))
ORDER BY date DESC)
UNION
((SELECT * FROM transactions
WHERE amount < to_number('$bill_amount','99999999D99')
AND acc_int = 'cash'
AND date > to_date('$bill_date', 'YYYY-MM-DD'))
UNION
(SELECT * FROM transactions
WHERE amount < to_number('$bill_amount','99999999D99')
AND acc_int = 'xxx-xxxxxxx-xx'
AND date > to_date('$bill_date', 'YYYY-MM-DD'))
ORDER BY date DESC)
前兩個選擇可以合併條件。我認爲這應該通過使用括號來完成,但它似乎沒有工作。
此外我想對結果進行排序,以便首先所有等於帳單上的金額,然後按日期計算的金額較低的交易 - 這就是爲什麼我將前兩個選擇與最後兩個選擇相結合,但使用UNION
似乎打亂了排序。
THX對於任何見解(答案或鏈接到好的資源都歡迎!)
THX - 這是一個 - 它完美的作品。我知道它可以完成,但被1個錯誤阻止(OR子句可能是錯誤的,因爲我認爲我按照你描述的方式嘗試了它),還有一件事我根本不知道(ORDER BY-指令)。 – zenlord