我在Oracle下面有两个表。
我有两个请求:
我正在使用下面无法正常工作的代码:
select distinct consignment_no from table_1 a
where not exists (select b.consignment_no from table_2 b where trunc(a.deman_date)='&dat' and trunc(b.manifest_date)='&dat')
答案 0 :(得分:0)
WITH t
AS (SELECT *
FROM tbl1
WHERE consignment_no NOT IN (SELECT consignment_no FROM tbl2))
SELECT tbl2.*
FROM t, tbl2
WHERE t.deman_date = tbl2.manifest_date;
这是创建表语句的全部内容....
CREATE TABLE tbl1
AS
SELECT 501000000 AS consignment_no,
TO_DATE ('15/11/2015', 'dd/mm/yyyy') AS deman_date
FROM DUAL
UNION ALL
SELECT 501000000, TO_DATE ('15/11/2015', 'dd/mm/yyyy') FROM DUAL
UNION ALL
SELECT 501000000, TO_DATE ('15/11/2015', 'dd/mm/yyyy') FROM DUAL
UNION ALL
SELECT 501000001, TO_DATE ('16/11/2015', 'dd/mm/yyyy') FROM DUAL
UNION ALL
SELECT 501000002, TO_DATE ('16/11/2015', 'dd/mm/yyyy') FROM DUAL;
CREATE TABLE tbl2
AS
SELECT 501000000 AS consignment_no,
TO_DATE ('15/11/2015', 'dd/mm/yyyy') AS manifest_date
FROM DUAL
UNION ALL
SELECT 501000001, TO_DATE ('16/11/2015', 'dd/mm/yyyy') FROM DUAL;
WITH t
AS (SELECT *
FROM tbl1
WHERE consignment_no NOT IN (SELECT consignment_no FROM tbl2))
SELECT tbl2.*
FROM t, tbl2
WHERE t.deman_date = tbl2.manifest_date;
答案 1 :(得分:0)
也许我不理解你的问题,但是:
从table_1减去table_2
中选择*- 如果你想要distict值
从table_1减去table_2
中选择distinct *- 如果需要,您可以只选择一列
答案 2 :(得分:0)
对于1,您可以使用外部联接执行此操作,并返回表2返回null的那些。
对于2,我认为这是您想要的单独查询。为此,一个简单的内连接将起作用。
如果这不是您想要的单独查询,那么这是相互矛盾的,您将永远不会返回任何行。如果您最初开始使用的是表1中表2中的所有行,则表2中没有匹配的行。