【问题标题】:Merging two result sets合并两个结果集
【发布时间】:2018-02-14 14:24:45
【问题描述】:

我知道这里有很多与我所面临的问题有关的问题,但没有一个能够解决我的问题。

我有两个表 TABLE_1TABLE_2

TABLE_1 包含以下列: ID, 姓名

TABLE_2 包含以下列: 代码, 数量, 数量

两张表的列数不同,但行数相同。

可以编写一个 SQL 查询,其中我可以从单个结果集中的两个表中检索所有列。 我正在使用 MySQL 服务器。

注意:两个表没有共同的列。任何帮助表示赞赏。

这就是我希望检索的方式:

| ID  |  NAME  |  CODE   | AMOUNT  | QUANTITY |
|     |        |         |         |          |
|     |        |         |         |          |
|     |        |         |         |          |

【问题讨论】:

  • 您要创建具有row_count^2 或相同行数的表吗?不使用 where 子句将导致交叉连接,其中第一个表中的行数乘以第二个表中的行数。
  • @anonyXmous 我希望有相同的行数。没有交叉连接。
  • @anonyXmous 两个表的行数也相同。
  • 如果没有公共列,请查看是否有任何其他可以链接的表。您可能会发现table_1table_x 有关系,table_ytable_z 有关系,table_2 有关系。如果你不能做到这一点,那么你就有麻烦了。 SQL 数据具有no 固有顺序。没有“第一行”的真正概念,因此没有真正的方式以一致、确定或逻辑连贯的方式将行相互排列。
  • @MatBailie;除了结合表格之外,这个问题没有合乎逻辑的解释。它甚至不适合“合并”一词,因为除了它们都具有相同的行数和不同的列名之外,不涉及任何逻辑。

标签: mysql sql database select


【解决方案1】:

参考下面的查询

SELECT a.ID, a.NAME, b.CODE,b.AMOUNT  ,b.QUANTITY 

FROM (SELECT 
  ROW_NUMBER() OVER(ORDER BY name ASC) AS RowNo, * FROM TABLE_1 )a

inner join (SELECT 
  ROW_NUMBER() OVER(ORDER BY  CODE ASC) AS RowNo, * FROM TABLE_2 )b 
On a.RowNo= b.RowNo

【讨论】:

  • 根据什么理由应该将“名字”与“第一个代码”结合起来?您还隐含地假设这些列在各自的表中是唯一的。
【解决方案2】:

@Allan,这是我的解决方案。希望对您有所帮助。

CREATE TABLE t1(
ID INTEGER,
NAME VARCHAR(10)
);

CREATE TABLE t2(
CODE  INTEGER,
AMOUNT INTEGER,
QUANTITY INTEGER
);

INSERT INTO t1 VALUES(91, 'Name1');
INSERT INTO t1 VALUES(92, 'Name2');
INSERT INTO t1 VALUES(93, 'Name3');

INSERT INTO t2 VALUES(1, 123, 2);
INSERT INTO t2 VALUES(2, 233, 4);
INSERT INTO t2 VALUES(3, 433, 1);

Query:
SET @rank=0;
SET @rank2=0;

select id,name,code,amount,quantity
from 
(SELECT @rank:=@rank+1 AS rank, id, name
from t1) a,
(SELECT @rank2:=@rank2+1 AS rank, code, amount, quantity
from t2) b
where a.rank=b.rank;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多