【问题标题】:Multiple join from same view name with another view name从同一个视图名称与另一个视图名称的多个连接
【发布时间】:2017-10-15 16:44:59
【问题描述】:
CREATE TABLE IF NOT EXISTS `SF` 
(
    `ref` int(6) unsigned NOT NULL,
    `extref` int(6) unsigned NOT NULL,
    `portfno` int(3) NOT NULL,
    `content` varchar(200) NOT NULL,
     PRIMARY KEY (`ref`)
) DEFAULT CHARSET=utf8;

INSERT INTO `SF` (`ref`, `extref`, `portfno`,`content`) 
VALUES ('100', '200', '999','SF1'),
       ('101', '200', '000','SF2'),
       ('102', '201', '999','SF3'),
       ('103', '201', '000','SF4');

CREATE TABLE IF NOT EXISTS `SEC` 
(
    `ref` int(6) unsigned NOT NULL,
    `extref` int(6) unsigned NOT NULL,
    `portfno` int(3) NOT NULL,
    `content` varchar(200) NOT NULL,
    PRIMARY KEY (`ref`)
) DEFAULT CHARSET=utf8;

插入SEC (ref, extref, portfno,content) 值('100','200','999','SEC1'), ('101', '200', '000','SEC2'), ('102', '201', '999','SEC3'), ('103', '201', '000','SEC4');

我想要的输出如下 2 条记录。

Rec 1 ->100,200,999,sf1,100,200,999,sec1,101,200,000,sf2,101,200,000,sec2
Rec 2 ->102,201,999,sf3,102,201,999,sec3,103,201,000,sf4,103,201,000,sec4

我需要有不应该遇到性能问题的解决方案。

【问题讨论】:

  • 您使用的是哪个数据库?您想要的输出背后的逻辑/原因是什么?请解释
  • 回答第一条评论后,告诉我 Rec 1 a Row 1 吗?
  • 这是场景,数据库是 ibm db2..是的 rec1 是第一行..

标签: sql


【解决方案1】:

使用某种游标更容易做到这一点。但是光标在性能上并不是很容易。使用游标只是填充一些临时表,应该很容易。

以下是不用光标的方法

select
 sf_odd.*
,sec_odd.*
,sf_even.*
,sec_even.*

FROM (SELECT *, Row_Number() OVER(ORDER BY ref) AS rn FROM sf) sf_even
join (SELECT *, Row_Number() OVER(ORDER BY ref) AS rn FROM sf) sf_odd
 on sf_odd.rn % 2 = 1
 and sf_even.rn % 2 = 0
 and sf_odd.rn = sf_even.rn + 1
Join (SELECT *, Row_Number() OVER(ORDER BY ref) AS rn FROM sec) sec_even
 on sec_even.rn % 2 = 0
 and sec_even.ref = sf_even.ref
join (SELECT *, Row_Number() OVER(ORDER BY ref) AS rn FROM sec) sec_odd
 on sec_odd.rn % 2 = 1
 and sec_odd.ref = sf_odd.ref

【讨论】:

  • Alex 正在处理视图。而且它不是一张桌子。我只是想分享一下场景......
猜你喜欢
  • 2014-10-02
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 2017-10-03
相关资源
最近更新 更多