早上好,
我最近的数据困惑涉及我需要在Oracle SQL Union Query中添加标志列。查询语法很简单:
SELECT
tblA.*
FROM tblA
INNER JOIN tblB ON tblA.fldA = tblB.fldA
UNION ALL
SELECT
tblA.*
FROM tblA
INNER JOIN tblB on tblA.fldA = tblB.fldB
因此,我正在寻找的是:IF在联盟中查询它的行来自下半部(INNER JOIN tblB on tblA.fldA = tblB.fldB)
,因为那里有一个标志。我想添加一个名为“Flag”的列,如果它来自Union查询的第二部分,则会出现“Y”。
这可以实现吗?
另外,我很抱歉没有立即回应。我将没有互联网几个小时。我将不胜感激,并欢迎任何见解,我继续学习:)提前谢谢!
答案 0 :(得分:1)
你是说这个吗?
SELECT
tblA.*, 'N' as FLAG
FROM tblA
INNER JOIN tblB ON tblA.fldA = tblB.fldA
UNION ALL
SELECT
tblA.*, 'Y' as FLAG
FROM tblA
INNER JOIN tblB on tblA.fldA = tblB.fldB
答案 1 :(得分:1)
只需添加列:
SELECT tblA.*, 'from first part' as flag
FROM tblA
INNER JOIN tblB ON tblA.fldA = tblB.fldA
UNION ALL
SELECT tblA.*, 'from second part'
FROM tblA
INNER JOIN tblB on tblA.fldA = tblB.fldB
答案 2 :(得分:1)
我不确定对表A的额外扫描是最好的方法,特别是如果表B具有fldA = fldB的记录。也许你需要这样的东西
select
a.*,
decode(a.fldA, b.fldA, 'Y', 'N') first_match,
decode(a.fldA, b.fldB, 'Y', 'N') second_match
from tblA a
inner join tblB b on (a.fldA in (coalesce(b.fldA, -1), coalesce(b.fldB, -1)))