【问题标题】:Cross Join query in OracleOracle 中的交叉连接查询
【发布时间】:2019-08-01 17:02:38
【问题描述】:

我正在尝试重构一个在其 Select 连接中包含五个字段的查询,因此

SELECT
   Id
   '-'
   Field_2
   '-'
   Field_3
   '-'
   Field_4
    AS id
 FROM some_table

示例结果是这样的

Id

1-a-b-c-d

2-e-f-g-h

#null#
#null#

我的问题是,虽然此查询有效,但这些字段中的部分或全部可能为空。有人建议,当所有或任何这些字段为空时,交叉连接可以允许显示空。不幸的是,我不知道该怎么做。由于行数较多,建议使用交叉连接以提高性能。

谁能告诉我怎么做

【问题讨论】:

  • 交叉连接似乎是一种奇怪的方法。连接时只需用Coalesce(columnname, '') 包裹每一列,将其从空切换为空白,这样它就可以连接而不返回NULL。不过,也许我误解了这个问题。
  • 连接将结果显示为键,但如果某些内容为空,我们仍希望在文本中显示 ID 为空的行。该查询将在 mi 报告中使用
  • 当我们将键显示为空且带有单词 null 的任何字段时,否
  • 再一次,一些示例数据和期望的结果在这里真的会有所帮助。
  • 您的代码不是有效的 SQL。您是否打算在值之间使用||

标签: sql oracle


【解决方案1】:

您没有提供太多细节,但我希望您想要的是以下内容。

SELECT COALESCE(Id,'') || '-' || 
       COALESCE(Field_2,'') || '-' ||
       COALESCE(Field_3,'') || '-' ||
       COALESCE(Field_4,'')
    AS id
 FROM some_table

【讨论】:

    【解决方案2】:

    试试这个
    从 some_table 中选择 nvl(concat(concat(concat(concat(a,b),c),d),e),'NULL')

    【讨论】:

    • 如果只有连接运算符;)
    【解决方案3】:

    当我们将键显示为 null 并带有单词 null 的任何字段时

    这里可以加入什么?使用简单的case

    with sample_data(id, field1, field2, field3, field4) as (
        select 1,  'a',  'b',  'c',  'd' from dual union all
        select 2,  'e',  'f',  'g',  'h' from dual union all
        select 3,  'p',  'q', null,  's' from dual union all
        select 4, null,  'x',  'y',  'z' from dual )
    
    select case when id is null or field1 is null or field2 is null or field3 is null or field4 is null
                then '#null#'
                else id || '-' || field1 || '-' || field2 || '-' || field3 || '-' || field4
           end as id
      from sample_data
    

    结果:

    ID
    ---------
    1-a-b-c-d
    2-e-f-g-h
    #null#
    #null#
    

    【讨论】:

      猜你喜欢
      • 2012-12-31
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 2015-07-13
      • 2019-03-03
      • 1970-01-01
      • 2020-03-12
      相关资源
      最近更新 更多