混合两个不同表的记录

发布于 2024-12-04 03:16:53 字数 878 浏览 4 评论 0原文

我正在寻找一种方法来解决我的 SQL 问题。

我在 Firebird 2.5 中有 2 个表( T1 和 T2 ),如下所示:

T1 (
 T1_ID INTEGER,
 T1_DAY DATE,
 T1_NAME VARCHAR(200)
)

T2 (
 T2_ID INTEGER,
 T2_DAY DATE,
 T2_NAME VARCHAR(200)
)

我需要一个查询来混合这些表的记录并按日期升序对它们进行排序。我不关心连接查询是否会增加字段数量或者日期字段与结果不同或需要存储过程。

示例输出

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

I'm looking for a way to solve my SQL problem.

I have 2 tables in Firebird 2.5 ( T1 and T2 ) like these:

T1 (
 T1_ID INTEGER,
 T1_DAY DATE,
 T1_NAME VARCHAR(200)
)

T2 (
 T2_ID INTEGER,
 T2_DAY DATE,
 T2_NAME VARCHAR(200)
)

I need a query that mixes records of those tables and sort them in ascending date order. I don't care if a join query increases the number of fields or the date field is not the same as result or stored procedures are needed.

Example output

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

or (better output)

 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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

耀眼的星火 2024-12-11 03:16:53

您需要 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;

You want the UNION operator:

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
;

You can make the individual selects have any additional features you like. The only restriction is that all of the columns in both of the select lists are in the same order and have the same type (they are "union compatible"). The resulting rows will have column headings like the first select.

edit: To control the ordering of a union, you'll have to do the union in a subselect and the ordering in the outer query.

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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文