select1 select2
a1 b1 c1 a2 b2 c2 (column name)
34 64 65 45 67 54
34 43 65 74 75 54
63 54 45 546 76 46
combined
a1 b1 c1 a2 b2 c2
34 64 65 45 67 54
34 43 65 74 75 54
635 54 45 54 76 46
查询:
SELECT t1.a1, t1.b1, t1.c1, t2.a2, t2.b2, t2.c2
FROM table1 t1, table2 t2
WHERE t1.time between '2018-03-05' and '2018-03-06'
AND t2.time between '2018-03-05' and '2018-03-06';
嗨,我想知道如何将两个SELECT语句组合成一个SELECT语句,就像上面的图片一样。我希望它们与列结合,就像图片一样。
答案 0 :(得分:0)
尝试此查询
Select a.a1,a.b2,c.a1,b.a2,b.b2 ,b.c2 from table1 a
inner join table2 b on table1 any row <> table 2 any row
答案 1 :(得分:0)
通常情况下,你会使用inner join
来做类似的事情。但是inner join
需要在它加入的两个对象之间使用一些公共列,而你却没有。
由于您的查询也不包含ORDER BY
子句,因此没有可靠的方法来加入它们,因此table1
中的每一行都将始终连接到table2
中的同一行。
但是,由于两个表都有time
列,您可以使用:
;WITH CTE1 AS
(
SELECT a1,
b1,
c1,
ROW_NUMBER() OVER(ORDER BY [time]) AS rn
FROM Table1
WHERE time between '2018-03-05' and '2018-03-06'
), CTE2 AS
(
SELECT a2,
b2,
c2,
ROW_NUMBER() OVER(ORDER BY [time]) AS rn
FROM Table2
WHERE time between '2018-03-05' and '2018-03-06'
)
SELECT t1.a1, t1.b1, t1.c1, t2.a2, t2.b2, t2.c2
FROM cte1 as t1
INNER JOIN cte2 as t2 ON t1.rn = t2.rn
答案 2 :(得分:0)
如果您没有任何要加入的列,则可以生成行号并加入其中。对业务不太确定,但下面将在这里工作。如果两个表中的行数不同,则将join更改为required。
;WITH CTE AS
(
SELECT * , ROW_NUMBER() OVER(ORDER BY yourOrderbyColumn) rnk
from table1
)
,CTE1 AS
(
SELECT * , ROW_NUMBER() OVER(ORDER BY yourOrderbyColumn) rnk
from table2
)
SELECT * FROM CTE a
INNER JOIN CTE1 b ON a.rnk = b.rnk
答案 3 :(得分:0)
我们正在谈论SQL基础知识,它看起来你的第一次尝试可以工作,顺便说一下,这是你可以写的另一种常见风格:
SELECT t1.a1,
t1.b1,
t1.c1,
t2.a2,
t2.b2,
t2.c2
FROM table1 t1
inner join table2 t2 on t2.time = t1.time
WHERE t1.time between '2018-03-05' and '2018-03-06' ;