我需要一个 SQL 语句,它允许我从一个表中获取一列,从另一个表中获取一列,并将它们并排呈现。我一直在仔细研究有关 JOIN 的文献,但它们似乎总是需要一个我不感兴趣的“on”子句。
我发现的最接近的是“NATURAL JOIN”,但这似乎输出的结果为我提供了第 1 列中每一行的第 2 列中的所有行。有什么想法吗?
只是为了说明目的,这就是我想要的......
Table 1
t11
---
0
---
1
---
2
Table 2
t21
---
a
---
b
---
c
Run Code Online (Sandbox Code Playgroud)
期望的结果:
Table 3 (or output of MySQL statement)
t31 | t32
--- | ---
0 | a
--- | ---
1 | b
--- | ---
2 | c
Run Code Online (Sandbox Code Playgroud)
您可以尝试这个查询:
SELECT
T1.a AS from_Table1,
T2.a AS from_Table2
FROM
(
SELECT
a,
@rn1 := @rn1 + 1 AS row_number
FROM t11, (SELECT @rn1 := 0) var
) AS T1
INNER JOIN
(
SELECT
a,
@rn2 := @rn2 + 1 AS row_number
FROM t21, (SELECT @rn2 := 0) var
) AS T2
ON T1.row_number = T2.row_number;
Run Code Online (Sandbox Code Playgroud)
解释:
我在此查询中使用了 mysql 用户定义的变量。
为了理解上面的查询,您需要单独运行这个查询。
SELECT
a,
@rn1 := @rn1 + 1 AS row_number
FROM t11, (SELECT @rn1 := 0) var;
Run Code Online (Sandbox Code Playgroud)
该查询将给出以下输出:
从表 t11 可以看出:
a row_number
0 1
1 2
2 3
Run Code Online (Sandbox Code Playgroud)
看,我已经使用表中的数据创建了一个临时表t11,并为每一行分配了一个数字,即行号(由 mysql 用户定义的变量@rn1)。
看,(SELECT @rn1 := 0) var查询中的这一行是初始化部分。我的意思是它用 value 初始化一次zero。稍后,在每次查找表时,t11变量@rn1都会递增1并与相应行中的列一起打印a。
以同样的方式,我创建了另一个临时表,其中包含数据t21并执行与上面相同的操作。
SELECT
a,
@rn2 := @rn2 + 1 AS row_number
FROM t21, (SELECT @rn2 := 0) var;
Run Code Online (Sandbox Code Playgroud)
从表 t21 可以看出:
a row_number
a 1
b 2
c 3
Run Code Online (Sandbox Code Playgroud)
INNER JOIN现在您需要在这两个表之间创建一些内容( i.e. row_number)。
因此连接这两个表ON row_number并得到预期的结果。
from_Table1 from_Table2
0 a
1 b
2 c
Run Code Online (Sandbox Code Playgroud)
警告:
由于从表中选择数据时没有任何顺序,因此可能会得到随机结果。我很欣赏在从表格中选择时按某些字段排序。
谢谢。
| 归档时间: |
|
| 查看次数: |
4100 次 |
| 最近记录: |