区分联合表中的行

时间:2010-02-16 14:07:09

标签: sql mysql

我使用此sql查询选择两个不同表中没有匹配列的数据

      select * from (SELECT s.shout_id, s.user_id, s.time FROM shouts s
union all
select v.post_id, v.sender_user_id, v.time from  void_post v) 
as derived_table order by time desc;

现在有任何其他方式或使用此sql语句只能我     区分两个表中的数据。

我在想一个可以在运行时创建的虚拟行(仅在select语句中),它会标记任一表中的行。

因为我无法区分联合表中抛出的shout_id     来自喊叫表或来自void_post表的shout_id。

谢谢你 Pradyut

3 个答案:

答案 0 :(得分:5)

当然,只需在select语句中添加一个名为source的新字段,每个字段的常量值不同。

SELECT s.shout_id, s.user_id, s.time, 'shouts' as source FROM shouts s 
UNION ALL
SELECT v.post_id, v.sender_user_id, v.time, 'void_post' as source FROM void_post v

答案 1 :(得分:4)

您可以在每个选择中包含一个额外的列(我建议使用BIT)

select * from 
(SELECT s.shout_id, s.user_id, s.time, 1 AS FromShouts FROM shouts s
union all
select v.post_id, v.sender_user_id, v.time, 0 AS FromShouts from  void_post v) 
as derived_table order by time desc;

答案 2 :(得分:2)

虚拟变量是一种很好的方法。宏伟的计划没有太大的开销。

p.s。,虚拟变量代表一列,一行。