在联合Oracle SQL查询中添加标志列?

时间:2017-11-08 14:12:26

标签: sql oracle union

早上好,

我最近的数据困惑涉及我需要在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”。

这可以实现吗?

另外,我很抱歉没有立即回应。我将没有互联网几个小时。我将不胜感激,并欢迎任何见解,我继续学习:)提前谢谢!

3 个答案:

答案 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)))