У меня возникают проблемы с запросом «advanced» (по моим стандартам) в Postgresql, и я не уверен, как мне искать ответ (ключевые слова и т. Д.). Я просмотрел примеры в справочнике Postgresql и искал stackOverflow для подобных потоков, но безуспешно ...postgresql запрос с AND/OR/UNION
У меня есть две таблицы: одна с векселями и одна с транзакциями, а таблица, которую я хотел бы выводить, содержит только те транзакции, которые являются 1) более поздними, чем счет, 2) ниже или равным счету 3) на определенном счете или оплачиваются наличными.
Этот запрос делает именно это, но я предполагаю, что это может быть оптимизировано:
((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)
Первые два выбирает могут быть объединены, если я мог бы просто добавить OR
к «acc_int'-состоянии, не нарушая другой условия. Я думал, что это нужно сделать, используя скобки, но, похоже, это не сработало.
Кроме того, я хотел бы отсортировать результат так, чтобы сначала все транзакции равны сумме на счете, а затем, по дате, более низкие суммы - вот почему я совмещаю первые два выбора с двумя последними выборами, но используя UNION
похоже, нарушает порядок.
THX для любой проницательности (ответы или ссылки на хорошие ресурсы оба приветствуются!)
THX - это один - он отлично работает. Я знал, что это можно сделать, но сдерживается 1 ошибкой (OR-предложение, вероятно, было ошибочно записано, потому что я думаю, что я попробовал это так, как вы описали) и 1 вещь, которую я даже не знал (выражения в ORDER BY- инструкция). – zenlord