什么"选择Distinct Null为xxxxx"意思?

时间:2013-10-18 15:39:02

标签: java sql database stored-procedures sybase

后台:我使用Spring将Sybase存储过程返回值映射到java对象。

例如,我在Sybase中将varchar的Sybase数据类型映射为String类型,在Java中将Sybase数据类型int映射为int类型等。

我在其中一个存储过程中遇到了以下代码:

SELECT DISTINCT
    A.Col1 AS val1,
    A.Col2 AS val2,
    NULL AS someVal,
    A.col3 AS val3,
    ...
    A.col9 AS val9
FROM #SomeTable A
ORDER BY Col2, Col3

我有两个相关的问题:

  1. Null在这种情况下的含义是什么?我很困惑这里发生了什么。

  2. 我能够通过查看存储过程中先前定义的表A的表定义来确定Col1,Col2等的数据类型。因此我知道我可以在我的Java对象中为val1,val2等定义什么数据类型。但是“someVal”呢?我应该为这个Null值执行什么数据类型映射?

  3. 我对SQL很缺乏经验。也许答案比我意识到的要简单得多。

2 个答案:

答案 0 :(得分:3)

这会在所有行中创建一个NULL个值的列。

时这个技巧很有用
  • 您的查询结果的读者需要列someVal,处理此列缺失为错误的情况,或
  • 您的查询是UNION ALL查询中GROUP BY查询的一部分,其他查询填写了NULL s的值。

以下是后一种情况的示例:

SELECT -- This query flattens the results of the two sub-queries
    document_id
,   MIN(approval_date) as approval_date
,   MIN(availability_date) as availability_date
FROM (
    SELECT -- This subquery supplies approval_date
        document_id
    ,   MAX(approval_date) AS approval_date
    ,   NULL AS availability_date
    FROM document_approvals
    GROUP BY document_id
UNION ALL
    SELECT -- This subquery supplies availability_date
        document_id
    ,   NULL AS approval_date
    ,   MAX(availability_date) AS availability_date
    FROM document_approvals
    GROUP BY document_id
)
GROUP BY document_id

答案 1 :(得分:2)

您将有一个名为someVal的列,其中NULL为每行的值。

使用ResultSet,您可以使用getString(int)getString(String)说明

  

返回:列值;如果值为SQL NULL,则为值   返回为null

您可以选择所需的任何参考类型,包括Void,以映射此列。或者不要使用任何,即。不要映射它。取决于您的要求。