Oracle 如何从specefic客户不存在的表中提取记录?

Oracle 如何从specefic客户不存在的表中提取记录?,oracle,Oracle,我在一张表格中有以下情况(客户联系人) 我想创建一个结果集,在那里我可以显示CUST2与那些仅基于SYSDATE的CUST1中存在的行的映射。我不会选择与CUST1和CUST2共用的行 当前表格 CUSTOMER ID OFFERNAME PACKAGE INSERT_DATE ------------------------------------------------- CUST1 OfferA 123 27-Mar-2020 CU

我在一张表格中有以下情况(客户联系人)

我想创建一个结果集,在那里我可以显示CUST2与那些仅基于SYSDATE的CUST1中存在的行的映射。我不会选择与CUST1和CUST2共用的行

当前表格

CUSTOMER ID   OFFERNAME    PACKAGE    INSERT_DATE
-------------------------------------------------
CUST1         OfferA       123        27-Mar-2020
CUST1         OfferB       456        27-Mar-2020
CUST1         OfferC       100        27-Mar-2020
CUST2         OfferA       123        27-Mar-2020
所需结果集:

CUSTOMER ID   OFFERNAME    PACKAGE    INSERT_DATE
-------------------------------------------------
CUST1         OfferA       123        27-Mar-2020
CUST1         OfferB       456        27-Mar-2020
CUST1         OfferC       100        27-Mar-2020
CUST2         OfferB       456        27-Mar-2020
CUST2         OfferC       100        27-Mar-2020
我编写了以下查询,但它不工作(没有记录)。这个问题正确吗

select * from CUST_CONTACTS A
LEFT JOIN CUST_CONTACTS B ON  B.OFFERNAME = A.OFFERNAME and B.PACKAGE = A.PACKAGE  
WHERE A.OFFERNAME is null and TRUNC(A.DT_INSERT) = TRUNC(SYSDATE) and TRUNC(B.DT_INSERT) = TRUNC(SYSDATE) AND A.CUSTOMER_ID = 'CUST1' AND B.CUSTOMER_ID = 'CUST2'
这里有一个选择

SQL> with test (id, offer, pkg, datum) as
  2    -- sample data
  3    (select 'c1', 'ofa', 123, date '2020-03-27' from dual union all
  4     select 'c1', 'ofb', 456, date '2020-03-27' from dual union all
  5     select 'c1', 'ofc', 100, date '2020-03-27' from dual union all
  6     select 'c2', 'ofa', 123, date '2020-03-27' from dual
  7    ),
  8  diff as
  9    -- C1 that doesn't have its match in C2
 10    (select 'c2' id, offer, pkg, datum
 11       from test where id = 'c1' and datum = trunc(sysdate)
 12     minus
 13     select 'c2' id, offer, pkg, datum
 14       from test where id = 'c2' and datum = trunc(sysdate)
 15    )
 16  -- Final result
 17  select id, offer, pkg, datum
 18  from test
 19  where id = 'c1'
 20    and datum = trunc(sysdate)
 21  union all
 22  select id, offer, pkg, datum
 23  from diff
 24  order by id, offer;

ID OFF        PKG DATUM
-- --- ---------- ----------
c1 ofa        123 27.03.2020
c1 ofb        456 27.03.2020
c1 ofc        100 27.03.2020
c2 ofb        456 27.03.2020
c2 ofc        100 27.03.2020

SQL>

您可以简单地使用减号和并集运算符,如下所示:

SQL> WITH YOUR_TABLE ( ID, OFFER, PKG, DATUM )  AS -- sample data
  2  (select 'CUST1', 'OfferA', 123, date '2020-03-27' from dual union all
  3  select 'CUST1', 'OfferB', 456, date '2020-03-27' from dual union all
  4  select 'CUST1', 'OfferC', 100, date '2020-03-27' from dual union all
  5  select 'CUST2', 'OfferA', 123, date '2020-03-27' from dual
  6  )  --your query starts from here
  7  SELECT ID, OFFER, PKG, DATUM FROM YOUR_TABLE WHERE ID = 'CUST1'
  8  UNION
  9  SELECT 'CUST2' AS ID, OFFER, PKG, DATUM FROM YOUR_TABLE WHERE ID = 'CUST1'
 10  MINUS
 11  SELECT ID, OFFER, PKG, DATUM FROM YOUR_TABLE WHERE ID = 'CUST2';

ID    OFFER         PKG DATUM
----- ------ ---------- ---------
CUST1 OfferA        123 27-MAR-20
CUST1 OfferB        456 27-MAR-20
CUST1 OfferC        100 27-MAR-20
CUST2 OfferB        456 27-MAR-20
CUST2 OfferC        100 27-MAR-20

SQL>

能否添加
创建表
语句和一些
插入项