【问题标题】:What does "Select Distinct Null As xxxxx" mean?“选择不同的 Null 作为 xxxxx”是什么意思?
【发布时间】:2013-10-27 12:42:07
【问题描述】:

背景:我正在使用 Spring 将 Sybase 存储过程返回值映射到 java 对象。

例如,我将varchar 的Sybase 数据类型映射为Java 中的String 类型,将int 的Sybase 数据类型映射为Java 中的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

我有 2 个相关问题:

  1. Null 在这种情况下是什么意思?我对这里发生的事情感到困惑。

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

我在 SQL 方面相当缺乏经验。也许答案比我想象的要简单得多。

【问题讨论】:

  • 您将拥有一个名为someVal 的列,其中NULL 作为每一行的值。
  • @SotiriosDelimanolis - 那么 someVal 将是 Java 中的什么数据类型?字符串、整数等?

标签: java sql database stored-procedures sybase


【解决方案1】:

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

  • 查询结果的读者希望存在someVal 列,将缺少该列的情况视为错误,或者
  • 您的查询是GROUP BY 查询中UNION ALL 查询的一部分,其他查询填充NULLs 的值。

下面是后一种情况的例子:

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

【讨论】:

    【解决方案2】:

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

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

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

    您可以选择任何您想要的引用类型,包括Void,来映射此列。或者不使用任何,即。不要映射它。取决于你的要求。

    【讨论】:

    • 这回答了第一个和第二个问题。
    • 请问您有帖子中引用的文档的链接吗?
    • @SoylentGreen 抱歉,我不在。 Here's the javadoc for ResultSet。至于SELECT NULL,我找不到任何文档,但你可以试试。这只是一个可用的 SQL 功能。
    猜你喜欢
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 2014-06-15
    • 2018-04-05
    • 1970-01-01
    • 2013-05-09
    • 2016-12-12
    • 2013-11-10
    相关资源
    最近更新 更多