2017-02-23 8 views
1

В приведенном ниже примере, если я запрашиваю свой вид, задающий конкретный ident, он правильно возвращается и говорит, что заказ завершен.SQL-запрос возвращает разные результаты в зависимости от поля

Если я затем запрошу все заказы, которые еще не завершены, он возвращает ident, что он явно видел, что БЫЛО выполнено. Как это возможно/

# select complete from orders_plus where ident = 8410; 
complete 
---------- 
t 
(1 row) 

# select ident,complete from orders_plus where complete = false; 
ident | complete 
-------+---------- 
    8402 | f 
    8410 | f 
    8414 | f 
(3 rows) 

Вот определение зрения:

# \d+ orders_plus 
         View "public.orders_plus" 
    Column |  Type  | Modifiers | Storage | Description 
--------------+-------------------+-----------+----------+------------- 
ident  | integer   |   | plain | 
station_id | integer   |   | plain | 
created  | date    |   | plain | 
due   | date    |   | plain | 
month  | date    |   | plain | 
comments  | character varying |   | extended | 
name   | character varying |   | extended | 
ud   | real    |   | plain | 
dp   | real    |   | plain | 
swrv   | real    |   | plain | 
sh   | real    |   | plain | 
jmsw   | real    |   | plain | 
sw   | real    |   | plain | 
prrv   | real    |   | plain | 
mhsw   | real    |   | plain | 
bmsw   | real    |   | plain | 
mp   | real    |   | plain | 
pr   | real    |   | plain | 
st   | real    |   | plain | 
rsw   | real    |   | plain | 
rsh   | real    |   | plain | 
rpr   | real    |   | plain | 
rmp   | real    |   | plain | 
total_points | real    |   | plain | 
complete  | boolean   |   | plain | 
View definition: 
SELECT o.ident, o.station_id, o.created, o.due, o.month, o.comments, o.name, 
    o.ud, o.dp, o.swrv, o.sh, o.jmsw, o.sw, o.prrv, o.mhsw, o.bmsw, o.mp, o.pr, 
    o.st, o.rsw, o.rsh, o.rpr, o.rmp, o.total_points, 
    COALESCE(sum(w.ud) >= o.ud AND sum(w.dp) >= o.dp AND sum(w.swrv) >= o.swrv AND sum(w.sh) >= o.sh AND sum(w.jmsw) >= o.jmsw AND sum(w.sw) >= o.sw AND sum(w.prrv) >= o.prrv AND sum(w.mhsw) >= o.mhsw AND sum(w.bmsw) >= o.bmsw AND sum(w.mp) >= o.mp AND sum(w.pr) >= o.pr AND sum(w.st) >= o.st AND sum(w.rsw) >= o.rsw AND sum(w.rsh) >= o.rsh AND sum(w.rpr) >= o.rpr AND sum(w.rmp) >= o.rmp, false) AS complete 
    FROM orders o 
    LEFT JOIN production_work w ON o.ident = w.order_id 
    GROUP BY o.ident; 
+1

Мое первое впечатление - поврежденный индекс. Если таблица имеет индексы в столбцах, попробуйте 'reindex orders_plus'. – klin

+0

Что такое индексы на '\ d + orders_plus'? .. –

+0

Это представление, которое, похоже, не имеет индексов. Я обновил вопрос, чтобы показать выход \ d + – Gargoyle

ответ

-1

идент не является первичным ключом. У вас есть 2 записи для одного и того же идентификатора (по крайней мере), один - t, один - f.

+0

Опять же, это VIEW, поэтому первичного ключа нет. таблица заказов имеет идентификатор в качестве первичного ключа, и вы можете видеть из первого выбора, который я показываю, есть только одна запись с этим идентификатором. – Gargoyle

Смежные вопросы