我正在寻找解决我的SQL问题的方法。
我在Firebird 2.5中有两个表(T1和T2),如下所示:
T1 (
T1_ID INTEGER,
T1_DAY DATE,
T1_NAME VARCHAR(200)
)
T2 (
T2_ID INTEGER,
T2_DAY DATE,
T2_NAME VARCHAR(200)
)
我需要一个混合这些表的记录并按asc日期顺序对它们进行排序的查询。我不在乎连接查询是否增加了字段数,或者日期字段与结果或存储过程不相同。
输出,例如
T1_ID T1_DAY T1_NAME T2_ID T2_DAY T2_NAME
---------------------------------------------------
1 01/02/2011 BOB NULL NULL NULL
2 27/02/2011 SAM NULL NULL NULL
NULL NULL NULL 8 15/03/2011 PETER
NULL NULL NULL 10 21/03/2011 JOHN
6 17/04/2011 AMY NULL NULL NULL
或(更好的输出)
ID DAY NAME
-------------------------
1 01/02/2011 BOB
2 27/02/2011 SAM
8 15/03/2011 PETER
10 21/03/2011 JOHN
6 17/04/2011 AMY
作为我在stackoverflow.com上的第一篇文章(即使我过去跟着它),我想感谢你对我的问题的任何回复,并感谢大家创造和帮助这个美丽的社区!
祝你好运
弗朗西斯
答案 0 :(得分:1)
您需要UNION
运算符:
SELECT
T1.T1_ID ID,
T1.T1_DAY DAY,
T1.T1_NAME NAME
FROM
T1
UNION
SELECT
T2.T2_ID,
T2.T2_DAY
T2.T2_NAME
FROM
T2
;
您可以让个人选择具有您喜欢的任何其他功能。唯一的限制是两个选择列表中的所有列都具有相同的顺序并且具有相同的类型(它们是“联合兼容”)。生成的行将具有类似第一个选择的列标题。
编辑:要控制联合的排序,您必须在子选择中执行联合,并在外部查询中进行排序。
SELECT u.ID, u.DAY, u.NAME
FROM (
SELECT T1.T1_ID ID, T1.T1_DAY DAY, T1.T1_NAME NAME
FROM T1
UNION
SELECT T2.T2_ID, T2.T2_DAY T2.T2_NAME
FROM T2
) u
ORDER BY u.NAME;