【发布时间】:2013-02-06 05:33:11
【问题描述】:
假设我有以下内容:
CREATE TABLE newtable AS (
SELECT @rownum:=@rownum+1 as rownum, name, age FROM (
SELECT name, age FROM clubAmembers
UNION
SELECT name, age FROM clubBmembers
)
) AS atable
我怎样才能使我可以在 SELECT 联合之前“在表的开头插入新行”,以便它以:
rownum | name| age
1 | "Jordan" | 6 <-- This is an arbitrarily inserted record with name="Jordan" age="6" that is not a part of any of the clubAmembers or clubBmembers table.
表格的其余部分(第 2 行及以后)将包含与 clubAmembers 然后 clubBmembers 的联合的实际结果。
基本上我正在寻找: 创建表 插入一行“乔丹”| 6 使用 union 执行 select,使得第一行之后的行以 "rownum=2" 开头,所有来自 clubAmembers 的数据等。
如何最好地做到这一点?
【问题讨论】:
-
订单只能通过 ORDER BY 子句可靠地建立。这是因为大多数 SQL,包括 UNION,都是“基于集合的”。
-
如果我只是联合 clubAmembers 和 clubBmembers,则 SELECT @rownum:=@rownum+1 建立顺序(如编号 1 到 ... n 的成员数)。如果我不可能在这些表合并之前插入一行,同时保留 rownum 的顺序,那么完成我想要的最好的选择是什么?
-
它不建立由 inside 联合产生的元素的顺序:选择操作发生在后面。它可能会按预期工作。或者它可能不会。