【问题标题】:EXCEPT SELECT SQL Query in DB2DB2 中的 SELECT SQL 查询除外
【发布时间】:2016-11-07 23:35:15
【问题描述】:

我是 DB2 新手,找不到与 EXCEPT 查询相关的任何内容 [除了] 非常简单的示例。我正在尝试比较两个表中的值,以返回出现在TABLE_A 但不在TABLE_B 中的值。问题是被比较的列不完全键,但需要先进行一些操作。

TABLE_A 中的ID_1 字段如下所示:000 999

TABLE_B 中的ID_2 字段如下所示:111-000999

因此,通过对来自每个 ID 的数据进行按摩,我们得到了此示例行的键值 000999。这应该会导致该行从查询结果中排除,因为两个表中都存在数据。

SELECT REPLACE (ID_1, ' ','') AS ID_1_TRIM
FROM MYDB.TABLE_A
EXCEPT 
SELECT SUBSTRING(ID_2,5,10) 
FROM MYDB.TABLE_B

此语法不起作用,它似乎返回了TABLE_A 中的所有值,即使按摩后的键值也出现在TABLE_B 中。

【问题讨论】:

    标签: sql select db2 except


    【解决方案1】:

    你有没有试过修剪可能是

     SELECT trim(REPLACE (ID_1, ' ','')) AS ID_1_TRIM
     FROM MYDB.TABLE_A
     EXCEPT 
     SELECT trim(SUBSTRING(ID_2,5,10)) FROM MYDB.TABLE_B
    

    或投射

     SELECT cast(trim(REPLACE (ID_1, ' ','')) as varchar(15)) AS ID_1_TRIM
     FROM MYDB.TABLE_A
     EXCEPT 
     SELECT cast(trim(SUBSTRING(ID_2,5,10)) as varchar(15))  FROM MYDB.TABLE_B
    

    在我的系列中,您的查询有效,您是否知道 ID_1 中的空格字符?

    【讨论】:

    • 谢谢,我已经尝试了这些替代方法,返回的结果仍然是 TABLE_A 中的所有值。当我分别运行每个SELECT 查询时,返回的值格式相同,应该匹配。
    • 真的很奇怪。如果你这样做: SELECT * FROM MYDB.TABLE_A f1 exception join MYDB.TABLE_B f2 on cast(trim(REPLACE (f1.ID_1, ' ','')) as varchar(15)) = cast(trim(SUBSTRING( f2.ID_2,5,10)) as varchar(15))
    • 看起来是数据有问题,但是修剪技术很有用,因为有隐藏的空格,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    相关资源
    最近更新 更多