在UNION之后获取数据源

时间:2010-07-21 17:04:14

标签: sql

我有一个像这样的SQL查询:

SELECT *
FROM (
  (SELECT name FROM man)
  UNION
  (SELECT name FROM woman )
) AS my_table
ORDER BY name

如何检索数据来源? 例如,如果我的结果是这样的:

Bob
Alice
Mario
...

我想知道'Bob'这个名字是从'man'表还是'woman'表中检索的。

3 个答案:

答案 0 :(得分:4)

SELECT * 
FROM ( 
  (SELECT name, 'man' as source FROM man) 
  UNION ALL
  (SELECT name, 'woman' FROM woman ) 
) AS my_table 
ORDER BY name 

我添加了UNION ALL因为如果它们是互斥的表,它会更快。如果不是,那么添加源将使结果互相排斥,您将能够看到重复的位置。如果它们不是互斥的,但您只想显示一条记录,那么您想要显示哪条记录显示哪条业务规则?

答案 1 :(得分:3)

select可以包含文字字符串,因此最简单的方法可能是:

SELECT *
FROM (
  (SELECT name, 'man' as source FROM man)
  UNION
  (SELECT name, 'woman' as source FROM woman )
) AS my_table
ORDER BY name

答案 2 :(得分:1)

这些只有在没有Man&的交叉点时才有效。女人。

如果您希望重复,则需要在where子句中添加一些魔法。 并且可能是联盟中的第三个查询,以涵盖两者都存在的情况。