条件为

时间:2015-12-29 16:21:39

标签: sql oracle11g

我正在使用两张桌子: 表一:order_table 表二:order_details

order_table:
 - Order ID (pk)
 - Submitter
 - Date

order_detail:
 - Order_detail_id (unique, auto generated)
 - parent_order (fk, points to the order_id this line is part of)
 - date
 - assigned_to (i.e. department1, department2, department3, department4) 

一个订单可以有多个订单详细信息 例如

Order_detail_id     parent_order    assigned_to
0000001 0010    department1
0000002 0010    department2
0000003 0010    department1
0000004 0010    department1
0000005 0011    department1
0000006 0011    department2
0000007 0011    department3

如您所见,可以在部门之间来回分配订单。

我要做的是获取从未分配给特定部门的所有订单的列表,无论他们来回分配多少次。 例如,从未在department2的任何位置分配的所有唯一订单号 到目前为止,我得到的任何内容或所有数据都包含了de department2 ...

我尝试了很多不同的方法,但我无法获得预期的结果。谢谢你的帮助

1 个答案:

答案 0 :(得分:2)

以下是获取从未分配给特定部门的订单的一种方法:

select od.parent_order
from order_detail od
group by od.parent_order
having sum(case when assigned_to = 'department2' then 1 else 0 end) = 0;

我喜欢这种方法,因为它很通用。在您的情况下,以下可能更有效:

select o.*
from orders o
where not exists (select 1
                  from order_details od
                  where od.parent_order = o.orderid and
                        od.assigned_to = 'department2'
                 );