Postgres运算符逻辑不起作用?

时间:2015-07-08 03:55:44

标签: sql postgresql

不能为我的生活弄清楚为什么我会把这一行拿回来

iperl> 22 / 7  # automatically print scalar result of expression: 3.14285714285714

运行此查询

 order_id | job_name | memname |     status     |  state
----------+----------+---------+----------------+----------
 0e4ba    | pwd_test |         | Wait Condition | Deleted

总结果:

select order_id, job_name, memname, status, state 
from a150708002_ajob 
where order_time < '20150601' 
  and status != 'Ended OK' 
   or state != 'Deleted' 
  and order_time < '20150601';

不确定发生了什么事?

更新

尝试以下仍然没有成功

em800=> select order_id, job_name, memname, status, state from a150708002_ajob where order_time < '20150601' and status != 'Ended OK' or state != 'Deleted' and order_time < '20150601';
 order_id | job_name | memname |     status     |  state
----------+----------+---------+----------------+----------
 0e4ba    | pwd_test |         | Wait Condition | Deleted
 0eevd    | DBPE220A |         | Wait Condition | Held
 0eeve    | SHAW     |         | Wait Condition | Held

表架构:

em800=> select order_id, job_name, memname, status, state from a150708002_ajob where order_time < '20150601' and not (status = 'Ended OK' or state = 'Deleted');
 order_id | job_name | memname |     status     |  state
----------+----------+---------+----------------+----------
 0e4ba    | pwd_test |         | Wait Condition | Deleted
 0eevd    | DBPE220A |         | Wait Condition | Held
 0eeve    | SHAW     |         | Wait Condition | Held
(3 rows)

回应Norbert van Nobelen的回答

                 Table "public.a150701002_aevt"
        Column        |            Type             | Modifiers
----------------------+-----------------------------+-----------
 evt_no               | integer                     | not null
 evt_time             | timestamp without time zone | not null
 evt_type             | character varying(1)        | not null
 new_value            | integer                     |
 old_value            | integer                     |
 order_id             | character varying(5)        |
 state_digits_new_ffu | character varying(15)       |
 state_digits_old_ffu | character varying(15)       |
Indexes:
    "pk_a150701002_aevt_0" PRIMARY KEY, btree (evt_no)
 task_class               | character varying(3)    |
 ind_cyclic               | character varying(1)    |
 reten_days               | character varying(3)    |
 reten_gen                | character varying(2)    |
 order_table              | character varying(770)  |
 order_lib                | character varying(44)   |
 sticky_ind               | character varying(1)    |
 seq_cnt_added            | integer                 |
 short_ffu                | character varying(12)   |
 dsect_ffu                | character varying(100)  |
 isn_                     | integer                 | not null
 time_ref                 | character varying(1)    |
 time_zone                | character varying(9)    |
 appl_type                | character varying(10)   |
 appl_ver                 | character varying(10)   |
 appl_form                | character varying(30)   |
 cm_ver                   | character varying(10)   |
 state_mask               | character varying(9)    |
 multy_agent              | character varying(1)    |
 schedule_env             | character varying(16)   |
 sys_affinity             | character varying(5)    |
 req_nje_node             | character varying(8)    |
 adjust_cond              | character varying(1)    |
 in_service               | character varying(255)  |
 stat_cal                 | character varying(30)   |
 stat_period              | character varying(1)    |
 instream_jcl             | text                    |
 use_instream_jcl         | character varying(1)    |
 lpar                     | character varying(8)    |
 due_out_daysoffset       | character varying(3)    |
 from_daysoffset          | character varying(3)    |
 to_daysoffset            | character varying(3)    |
 order_time               | character varying(14)   |
 avg_start_time           | character varying(6)    |
 cpu_time                 | integer                 |
 em_stat_cal_ctm          | character varying(20)   |
 em_stat_cal              | character varying(30)   |
 em_stat_period           | character varying(1)    |
 interval_sequence        | character varying(4000) |
 specific_times           | character varying(4000) |
 tolerance                | integer                 |
 cyclic_type              | character varying(1)    |
 current_run              | integer                 |
 elapsed_runtime          | integer                 |
 workloads                | character varying(525)  |
 def_nodegroup            | character varying(50)   |
 nodegroup_set_by         | character varying(1)    |
 failure_rc               | character varying(5)    |
 failure_rc_step          | character varying(8)    |
 failure_rc_procstep      | character varying(8)    |
 highest_rc               | character varying(5)    |
 highest_rc_step          | character varying(8)    |
 highest_rc_procstep      | character varying(8)    |
 highest_rc_memname       | character varying(8)    |
 associated_rbc           | character varying(20)   |
 cm_status                | character varying(32)   |
 depend_service_in        | character varying(1)    |
 depend_service_out       | character varying(1)    |
 em_stat_detail_data      | character varying(1500) |
 prev_odate_rerun_counter | integer                 |
 jobrc                    | character varying(5)    |

解答:

结果证明逻辑很好,只是单元格内的值有一个尾随的空格

em800=> select order_id, status, state from a150712002_ajob where order_time < '20150615' and (status != 'Ended OK' or state != 'Deleted') and order_time < '20150615';
 order_id |     status     |  state
----------+----------------+----------
 0eevd    | Wait Condition | Deleted
 0eeve    | Wait Condition | Held
(2 rows)

所以我只是在查询中添加了一个尾随空白字符。谢谢你们:))

1 个答案:

答案 0 :(得分:1)

状态检查中缺少一些括号:

select order_id, job_name, memname, status, state from a150708002_ajob 
where order_time < '20150601' and 
(status != 'Ended OK' or state != 'Deleted') and order_time < '20150601';

括号确定如何评估OR。