【发布时间】:2016-05-18 10:38:26
【问题描述】:
我正在尝试在不使用 UNION ALL 语句的情况下重新创建此查询,我已经尝试过 标量子查询和模型子句,但似乎都没有做我想要的。我的经理不想使用 Union All,但我真的不知道替代方案是什么
任何帮助都会很棒
SELECT null AS UDA_ID,
'Style-Level Attributes' AS UDA_DESC,
null AS DISPLAY_TYPE,
null AS REQUIRED_IND,
null AS ITEM,
null AS UDA_TEXT,
null AS UDA_DATE,
null AS UDA_VALUE
FROM DUAL
UNION ALL
select a.UDA_ID,
a.UDA_DESC,
a.DISPLAY_TYPE,
a.REQUIRED_IND,
b.ITEM,
b.UDA_TEXT,
b.UDA_DATE,
b.UDA_VALUE
from DAL.P_UDA a,
FFEDEV.FFE_ITEM_UDA b
where a.UDA_ID = b.UDA_ID (+)
AND a.REQUIRED_IND IS NOT NULL
AND b.ITEM_PARENT IS NULL
UNION ALL
SELECT null AS UDA_ID,
'Additional Attributes' AS UDA_DESC,
null AS DISPLAY_TYPE,
null AS REQUIRED_IND,
null AS ITEM,
null AS UDA_TEXT,
null AS UDA_DATE,
null AS UDA_VALUE
FROM DUAL
UNION ALL
select a.UDA_ID,
a.UDA_DESC,
a.DISPLAY_TYPE,
a.REQUIRED_IND,
b.ITEM,
b.UDA_TEXT,
b.UDA_DATE,
b.UDA_VALUE
from DAL.P_UDA a,
FFEDEV.FFE_ITEM_UDA b
where a.UDA_ID = b.UDA_ID (+)
AND a.REQUIRED_IND IS NULL
AND b.ITEM_PARENT IS NULL
【问题讨论】:
-
这就是创建
UNION的原因。如果您坚持这样做,您可以在所有这些查询之间使用FULL OUTER JOIN ON(1 = 2),并使用NVL或CASE EXPRESSION替换空值,这将与union 相同。 -
将结果行用作标题很奇怪。选定的行应该只包含数据。因此,您应该在结果行中添加一个包含“样式级别属性”或“附加属性”的列。那么您的查询不能保证按您希望的那样工作。如果没有
ORDER BY子句,则无法保证排序。UNION ALL承诺的所有内容是行会出现在结果中,而不是按什么顺序出现。一旦您的查询在并行线程中执行,您可能会看到所有记录都混合在一起。那么你不应该再使用早已被弃用的连接语法。
标签: sql oracle oracle11g union