【问题标题】:Non-Union query column does not result as expected非联合查询列未按预期结果
【发布时间】:2020-09-17 14:55:28
【问题描述】:

在这里,我从不同的表中获取所有 id,并使用“with”语句将其存储在数据集中。我需要的是,对于所有这些 id,我想从 CO_C 中提取一个名为“stat”的列。

我假设我可能需要合并 unionall 的结果,然后在 id 上使用 CO_C 进行左连接。

CO_C 表如下所示:

id           Stat
FJERHT     Executed
HRFGER     Not Executed
JEREFH     other 
JFHZFH     Executed

查询

with dataset as(
SELECT DISTINCT
  NAME AS id,
  'DIM' as "Source"
FROM
  CO_D

UNION ALL

SELECT DISTINCT
  PRO_ID AS id,
  'CON' as "Source"
  stat as stat         -----> this gives me error query block has an incorrect number of result columns
FROM
  CO_C

UNION ALL

SELECT DISTINCT
  P_ID AS id,
  'STU' as "Source"
FROM
  CO_O

select * from dataset
PIVOT (
    COUNT(*)
    FOR "Source"
    IN (
'DIM' as "Avail",
'CON' as CON,
'STU' as STU)

我尝试过的更新:

SELECT ID, stat
FROM CO_C
WHERE ID IN
(with dataset as(
    SELECT DISTINCT
      NAME AS id,
      'DIM' as "Source"
    FROM
      CO_D
    
    UNION ALL
    
    SELECT DISTINCT
      PRO_ID AS id,
      'CON' as "Source"
      stat as stat          
    FROM
      CO_C
    
    UNION ALL
    
    SELECT DISTINCT
      P_ID AS id,
      'STU' as "Source"
    FROM
      CO_O
    
    select * from dataset
    PIVOT (
        COUNT(*)
        FOR "Source"
        IN (
    'DIM' as "Avail",
    'CON' as CON,
    'STU' as STU)

错误:缺少选择关键字

【问题讨论】:

  • 选择列表必须匹配,即相同的列数和兼容的数据类型。将 NULL 作为 3:rd 列添加到较短的选择列表中。
  • 当查询明显涉及 UNION 时,为什么您的标题会显示“non-union”?
  • 我的意思是因为我不能在联合查询中包含我想要的列。

标签: sql oracle


【解决方案1】:

在 UNION 查询中,所有正在组合的查询必须提供相同数量的列。在您的情况下,引发错误的 SELECT 具有三列,而前一个 SELECT 仅返回两列。如果这是您想要的,您可能需要考虑为只返回两列的查询中未使用的列提供 NULL。

【讨论】:

  • 对不起,我修复了实际上我只检索三列结果,但我也希望检索 stat 列。
  • 知道了(我想)。你能用现在看起来的 SQL 修改你的问题吗?
  • 谢谢!但是,您仍然带回了错误的列数。此查询带回 SELECT 语句中的三列(id、source 和 stat),而您的其他 SELECTS 只带回两列:SELECT DISTINCT PRO_ID AS id, 'CON' as "Source" stat as stat
【解决方案2】:
SELECT ID, stat
FROM CO_C
WHERE ID IN
(
    SELECT DISTINCT
      NAME AS id,
      'DIM' as "Source"
    FROM
      CO_D
    
    UNION ALL
    
    SELECT DISTINCT
      PRO_ID AS id,
      'CON' as "Source"
      stat as stat          
    FROM
      CO_C
    
    UNION ALL
    
    SELECT DISTINCT
      P_ID AS id,
      'STU' as "Source"
    FROM
      CO_O)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多