我使用此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
答案 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。,虚拟变量代表一列,不一行。