Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.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 - Fatal编程技术网

Oracle 使用空格复制行:

Oracle 使用空格复制行:,oracle,Oracle,我的数据集如下: SELECT ' 1234 ' ID,NULL TAG,' AB' CODE FROM DUAL UNION ALL SELECT '453' ID,'GEN' TAG,'AB' CODE FROM DUAL UNION ALL SELECT '1234' ID,NULL TAG,' AB' CODE FROM DUAL) 我正在尝试使用下面的查询获取副本。输出应该是第1行和第3行,但我只得到一行作为1或3的修剪输出 SELECT TRIM(ID),TRIM(TAG),T

我的数据集如下:

SELECT '  1234 ' ID,NULL TAG,' AB' CODE FROM DUAL
UNION ALL 
SELECT '453' ID,'GEN' TAG,'AB' CODE FROM DUAL
UNION ALL
SELECT '1234' ID,NULL TAG,' AB' CODE FROM DUAL)
我正在尝试使用下面的查询获取副本。输出应该是第1行和第3行,但我只得到一行作为1或3的修剪输出

SELECT TRIM(ID),TRIM(TAG),TRIM(CODE) FROM 
(SELECT '  1234 ' ID,NULL TAG,' AB' CODE FROM DUAL
UNION ALL 
SELECT '453' ID,'GEN' TAG,'AB' CODE FROM DUAL
UNION ALL
SELECT '1234' ID,NULL TAG,' AB' CODE FROM DUAL)
WHERE (TRIM(ID),TRIM(TAG),TRIM(CODE)) IN 
(
SELECT TRIM(ID),TRIM(TAG),TRIM(CODE) FROM
(SELECT '  1234 ' ID,NULL TAG,' AB' CODE FROM DUAL
UNION ALL 
SELECT '453' ID,'GEN' TAG,'AB' CODE FROM DUAL
UNION ALL
SELECT '1234' ID,NULL TAG,' AB' CODE FROM DUAL)
GROUP BY TRIM(ID),TRIM(TAG),TRIM(CODE)
HAVING COUNT(*) >1
)

我刚刚运行了这个,它返回了第1行和第3行:

SELECT TRIM(ID),TRIM(TAG),TRIM(CODE) 
FROM 
(
    SELECT '  1234 ' ID,NULL TAG,' AB' CODE FROM DUAL
    UNION ALL 
    SELECT '453' ID,'GEN' TAG,'AB' CODE FROM DUAL
    UNION ALL
    SELECT '1234' ID,NULL TAG,' AB' CODE FROM DUAL
)
WHERE TRIM(ID) IN 
(
    SELECT TRIM(ID)
    FROM
    (
        SELECT '  1234 ' ID,NULL TAG,' AB' CODE FROM DUAL
        UNION ALL 
        SELECT '453' ID,'GEN' TAG,'AB' CODE FROM DUAL
        UNION ALL
        SELECT '1234' ID,NULL TAG,' AB' CODE FROM DUAL
    )
   GROUP BY TRIM(ID),TRIM(TAG),TRIM(CODE)
   HAVING COUNT(*) >1
)
我将您的WHERE更改为仅引用TRIMID,而不是全部3个值

编辑1,部分问题是您正在将null与null进行比较,这是您无法做到的。因此,您可以对列执行null检查,如果为null,则替换它。我用nvlnull“na”包装了空列,因此它有一个值要比较:

SELECT TRIM(ID) id,TRIM(TAG) tag,TRIM(CODE) code 
FROM 
(
    SELECT '  1234 ' ID, nvl(null, 'na') TAG,' AB' CODE FROM DUAL
    UNION ALL 
    SELECT '453' ID,'GEN' TAG,'AB' CODE FROM DUAL
    UNION ALL
    SELECT '  1234 ' ID,nvl(null, 'na') TAG,' AB' CODE FROM DUAL
    UNION ALL 
    SELECT '  1234 ' ID,nvl(null, 'na') TAG,' AC' CODE FROM DUAL
)
WHERE (TRIM(ID),TRIM(TAG),TRIM(CODE)) IN 
(
    SELECT TRIM(ID),TRIM(TAG),TRIM(CODE) 
    FROM
    (
        SELECT '  1234 ' ID,nvl(null, 'na') TAG,' AB' CODE FROM DUAL
        UNION ALL 
        SELECT '453' ID,'GEN' TAG,'AB' CODE FROM DUAL
        UNION ALL
        SELECT '  1234 ' ID,nvl(null, 'na') TAG,' AB' CODE FROM DUAL
        UNION ALL 
        SELECT '  1234 ' ID,nvl(null, 'na') TAG,' AC' CODE FROM DUAL
    )
   GROUP BY TRIM(ID), TRIM(CODE), TRIM(TAG)
   HAVING COUNT(*) >1
)

请参见

感谢您的回复……假设我在实际数据集中添加了一行,如SELECT'1234'ID、NULL标记、DUAL中的'AC'代码…………我不想将其视为重复。在这种情况下,你的想法将不复存在。如果是这样的话,那么你希望结果是什么?结果应该和前面所说的一样earlier@user1616243请看我的编辑。问题是您正在将null与null进行比较,而null不返回任何内容。所以你应该在列上做一个空检查,并用一个值替换它。这很有效..谢谢..我还把它转换成了一个连接,它也可以正常工作