我很难找到从另一个表中选择列的正确方法,并在同一时间显示一个包含两个表的结果。
第一张表:
id | times | project_id |
12 | 12.24 | 40 |
13 | 13.22 | 40 |
14 | 13.22 | 20 |
15 | 12.22 | 20 |
16 | 13.30 | 40 |
第二张表:
id | times | project_id |
32 | 22.24 | 40 |
33 | 23.22 | 40 |
34 | 23.22 | 70 |
35 | 22.22 | 70 |
36 | 23.30 | 40 |
我希望从第一个表中选择project_id = 40的所有时间,并从第二个表中为同一个project_id = 40连接到这个时间。
结果应如下所示:
id | time | time | project_id |
12 | 12.24 | 22.24 | 40 |
13 | 13.22 | 23.22 | 40 |
16 | 13.30 | 23.30 | 40 |
答案 0 :(得分:1)
您需要在这两个表之间使用proxy = https://<user-name>:<password>@<proxy-host>:<port>
https-proxy = https://<user-name>:<password>@<proxy-host>:<port>
,否则您将得到不正确的结果。一旦将所有行组合在一起,就可以使用变量来继承先前的值&#34;如下所示,并在此SQL Fiddle
MySQL 5.6架构设置:
UNION ALL
查询1 :
CREATE TABLE Table1
(`id` int, `times` decimal(6,2), `project_id` int)
;
INSERT INTO Table1
(`id`, `times`, `project_id`)
VALUES
(12, 12.24, 40),
(13, 13.22, 40),
(14, 13.22, 20),
(15, 12.22, 20),
(16, 13.30, 40)
;
CREATE TABLE Table2
(`id` int, `times` decimal(6,2), `project_id` int)
;
INSERT INTO Table2
(`id`, `times`, `project_id`)
VALUES
(32, 22.24, 40),
(33, 23.22, 40),
(34, 23.22, 70),
(35, 22.22, 70),
(36, 23.30, 40)
;
<强> Results 强>:
select
project_id, id, prev_time, times
from (
select
@row_num :=IF(@prev_value=d.project_id,@row_num+1,1) AS RowNumber
, d.*
, IF(@row_num %2 = 0, @prev_time, '') prev_time
, @prev_value := d.project_id
, @prev_time := times
from (
select `id`, `times`, `project_id` from Table1
union all
select `id`, `times`, `project_id` from Table2
) d
cross join (select @prev_value := 0, @row_num := 0) vars
order by d.project_id, d.times
) d2
where prev_time <> ''
注意:当准备好这个答案时,MySQL doe snot目前支持LEAD()和LAG()函数。当MySQL确实支持这些方法时,这种方法会更简单,也可能更有效。
select d.* from ( select d1.* , LEAD(times,1) OVER(partition by project_id order by times ASC) next_time from ( select id, times, project_id from Table1 union all select id, times, project_id from Table2 ) d1 ) d where next_time is not null