Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自连接Oracle_Oracle_Self Join - Fatal编程技术网

自连接Oracle

自连接Oracle,oracle,self-join,Oracle,Self Join,我有一个表,下面的表1是数据的样子 Column1是另一个表的外键 Column1 Column2 Column3 1 A 06/MAY/14 1 A 05/MAY/14 1 B 06/MAY/14 1 B 01/JAN/00 1 A 01/JAN/00 现在我想找到满足以下条件的不同column1值 1.至少有一条记录,其中第

我有一个表,下面的表1是数据的样子

Column1是另一个表的外键

    Column1 Column2 Column3
    1       A       06/MAY/14
    1       A       05/MAY/14
    1       B       06/MAY/14
    1       B       01/JAN/00
    1       A       01/JAN/00
现在我想找到满足以下条件的不同column1值

1.至少有一条记录,其中第2列应为A,第3列应为(sysdate-1)

2.至少有一条记录,其中第2列应为B,第3列应为(sysdate-1)

这意味着至少一个A和B的第3列应该填充(sysdate-1)

我写了下面的问题,请告诉我是否做错了什么

我也想知道我加入的方式是否正确。该表包含大约50K条记录,我想性能应该不错

    SELECT DISTINCT COLUMN1 FROM 
    TABLE1 A
    JOIN 
    TABLE1 B ON (A.COLUMN1 = B.COLUMN1)
    WHERE
    ((TRUNC(A.COLUMN3) - TRUNC(A.COLUMN3) = 0)
    AND TRUNC(A.COLUMN3) = TRUNC(SYSDATE - 1)
    AND TRUNC(B.COLUMN3) = TRUNC(SYSDATE - 1)
    AND A.COLUMN2 = 'A'
    AND B.COLUMN2 = 'B'
    AND TO_CHAR(A.COLUMN3, 'DD-MON-YY') != '01-JAN-00'
    AND TO_CHAR(B.COLUMN3, 'DD-MON-YY') != '01-JAN-00'
    );
这应该行得通

SELECT DISTINCT A.column1            -- Obtain distinct from A
FROM   table1 A                      -- TableA
       join table1 B                 -- TableB
         ON A.column1 = B.column1    -- Joining them on Column1 
WHERE  A.column3 = SYSDATE - 1       -- Yesterdays data on Table A
       AND A.column2 = 'A'           -- A values
       AND B.column2 = 'B';          -- B Values

注意:您的测试用例没有明显的差异。因此,请尝试使用唯一的键。

要进行性能比较,请使用子选择和组:

SELECT COLUMN1 FROM (
    SELECT 
        COLUMN1, 
        COUNT(COLUMN2) CNT 
    FROM (
        SELECT DISTINCT
            COLUMN1,
            COLUMN2
        FROM TABLE1 
        WHERE TRUNCATE(COLUMN3) = SYSDATE - 1 AND
            (COLUMN2 = 'A' OR COLUMN2 = 'B')) 
    GOUP BY COLUMN1)
WHERE CNT = 2

和B.column3=SYSDATE-1不需要
A.column3=SYSDATE-1
应该注意这一点<代码>A
B
是同一张表。哦,是的。谢谢。忘了Hanks,你能告诉我为什么当包含column3的所有行都是'01/JAN/00'时,下面的语句不返回任何行吗。从表1中选择distinct column1,max(column3)over(partitionbycolumn1)作为stmt,其中(1)simple中的column1。。。2000年1月不是昨天。。你说你只需要sysdate-1(昨天),如果你不知道它是什么,不要使用max over parion。。。首先阅读手册,但在上面的查询中我没有任何where子句声明sysdate-1。其中,第条仅为第(1)款中的第1列。