AND ta.task_status_type_ID NOT IN ( 10 )
不适用于以下查询.
SELECT ta.task_ID AS ID,u.employee_ID AS employee_ID,ta.task_status_type_IDFROM task_assignments AS ta,users AS uWHERE u.ID = ta.user_ID AND ta.ID IN ( SELECT max ( ta.ID ) OVER ( partition BY ta.task_ID ) AS ID FROM task_details AS td,task_assignments AS ta WHERE td.task_ID = ta.task_ID AND td.developer_employee_ID IS NulL AND ta.task_type_ID IN(6,7) AND ta.task_status_type_ID NOT IN ( 10 ) AND ta.task_status_type_ID IN ( 9 ) );
请帮助解决错误.
一个有根据的猜测(缺乏更多信息):如果涉及任何NulL值且测试值不在列表中,NOT IN(…)将返回NulL.但只有TRUE符合WHERE子句.
a NOT IN (b,c)
转变为:
a <> ALL ('{b,c}'::sometype[])
相当于:
(a <> b AND a <> c )
如果这些值中的任何一个(在运算符的任一侧)为NulL,则得到:
(NulL AND FALSE)
那是:
NulL
并且NulL在WHERE子句中等效于FALSE.只有TRUE才有资格.
众所周知,这会导致不熟悉tri-valued logic的用户不相信.
请改用IS DISTINCT FROM
或NOT EXISTS
.或LEFT JOIN / IS NULL
.
示例(更多猜测)
在这种特殊情况下,您根本不需要有罪的表达
SELECT ta.task_ID AS ID,u.employee_ID,ta.task_status_type_IDFROM task_assignments taJOIN users u ON u.ID = ta.user_IDWHERE ta.ID IN ( SELECT max(ta.ID) AS ID FROM task_details td JOIN task_assignments ta USING (task_ID) WHERE td.developer_employee_ID IS NulL AND ta.task_type_ID IN (6,7)-- AND ta.task_status_type_ID IS disTINCT FROM 10 -- just cruft AND ta.task_status_type_ID = 9 -- this Expression covers it GROUP BY ta.task_ID )
如果您秘密使用要排除的值列表,可以与包含列表共享元素:
... AND (ta.task_status_type_ID IN ( ... )) IS NOT TRUE...
或者你清除了NulL值.或者您在包含和排除列表中避免使用常见元素.
总结以上是内存溢出为你收集整理的不在postgresql中不工作全部内容,希望文章能够帮你解决不在postgresql中不工作所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)