Как выбрать из двух таблиц в определенном порядке, чтобы связать idT1-idT2 - PullRequest
0 голосов
/ 27 сентября 2018

У меня всегда был такой вопрос:

Как выбрать это в SQL (MySQL):

T1
A
3
4
5
6
7

T2
B
45
63
75
82
95

Result
3-45
4-63
5-75
6-82
7-95

Как видите, идея состоит в том, чтобы связать обе таблицы в одном порядке,Я попробовал это:

SELECT T1.A, T2.B FROM 
    (SELECT * FROM T1 ORDER BY A DESC) T1,
    (SELECT * FROM T2 ORDER BY B DESC) T2
GROUP BY T1.A DESC

Я получаю:

3-45
4-45
5-45
6-45
7-45

Нет успеха.

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018
DROP TABLE IF EXISTS T1;

CREATE TABLE t1
(A INT NOT NULL PRIMARY KEY);

INSERT INTO t1 VALUES
(3),
(4),
(5),
(6),
(7);

DROP TABLE IF EXISTS T2;

CREATE TABLE t2
(B INT NOT NULL PRIMARY KEY);

INSERT INTO t2 VALUES
(45),(63),(75),(82),(95);

SELECT x.a
     , y.b 
  FROM 
     ( SELECT a, @i:=@i+1 i FROM t1, (SELECT @i:=0) vars ORDER BY a) x 
  JOIN 
     ( SELECT b, @j:=@j+1 j FROM t2, (SELECT @j:=0) vars ORDER BY b) y 
    ON y.j = x.i;
+---+----+
| a | b  |
+---+----+
| 3 | 45 |
| 4 | 63 |
| 5 | 75 |
| 6 | 82 |
| 7 | 95 |
+---+----+
0 голосов
/ 27 сентября 2018

Попробуйте это немного короче

SET @rowid1 = 0;
SET @rowid2 = 0;

CREATE TEMPORARY TABLE IF NOT EXISTS t1x(INDEX(rowid)) AS (SELECT @rowid1:=@rowid1 + 1 AS rowid, a FROM t1 ORDER BY a);
CREATE TEMPORARY TABLE IF NOT EXISTS t2x(INDEX(rowid)) AS (SELECT @rowid2:=@rowid2 + 1 AS rowid, b FROM t2 ORDER BY b);

SELECT a, b FROM t1x JOIN t2x ON t2x.rowid = t1x.rowid ORDER BY a;
0 голосов
/ 27 сентября 2018

Попробуйте создать виртуальный номер строки, который будет использоваться для ключа объединения

select A,B from 
(select A,(
    SELECT count(*) from T1t where a.id >= t.id
) AS rownr from T1 a)X
inner join
(select B,(
    SELECT count(*) from T2 t where a.id >= t.id
) AS rownr from T2 a)Y on X.rownr=Y.rownr
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...