繁体   English   中英

mysql - 如何从多个表中选择两列并将它们放在一起(没有关系或标准)在 MySQL 中?

[英]How to select two columns from multiple tables and put them next to each other (no relationships or critera) in MySQL?

我需要一个 SQL 语句,它允许我从一张表中取出一列,从另一张表中取出一列,并将它们并排显示。 我一直在研究关于 JOIN 的文献,但它们似乎总是需要一个我不感兴趣的“on”子句。

我发现的最接近的是“自然连接”,但这似乎输出了一个结果,该结果为我提供了第 1 列中每一行的第 2 列中的所有行。有任何想法吗?

仅出于说明目的,这就是我想要的......

Table 1

t11
---
 0
---
 1
---
 2

Table 2

t21
---
 a
---
 b
---
 c

想要的结果:

Table 3 (or output of MySQL statement)

t31 | t32
--- | ---
 0  |  a
--- | ---
 1  |  b
--- | ---
 2  |  c

你可以试试这个查询:

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;

SQL 小提琴演示


说明:

我在这个查询中使用了 mysql 用户定义的变量。

为了理解上述查询,您需要单独运行此查询。

SELECT
    a,
    @rn1 := @rn1 + 1 AS row_number
FROM t11, (SELECT @rn1 := 0) var;

此查询将提供以下输出:

从表 t11:

a   row_number

0      1
1      2
2      3

看,我已经用表t11数据创建了一个临时表,并为每一行分配了一个数字,即一个行号(由 mysql 用户定义的变量@rn1 )。

看, (SELECT @rn1 := 0) var查询中的这一行是初始化部分。 我的意思是它用zero值初始化一次。 稍后在每次查找表t11 ,变量@rn1都会增加1并与相应行中的列a一起打印。

以同样的方式,我用来自t21数据创建了另一个临时表,并执行了与上面相同的操作。

SELECT
    a,
    @rn2 := @rn2 + 1 AS row_number
FROM t21, (SELECT @rn2 := 0) var;

从表 t21:

a   row_number

a      1
b      2
c      3

现在您可以在这两个表( ie row_number )之间进行内部INNER JOIN

所以ON row_number连接这两个表并得到预期的结果。

from_Table1     from_Table2

0                   a
1                   b 
2                   c

注意:

由于您在从表中选择数据时没有任何排序,因此您可能会得到随机结果。 我很欣赏在从表格中选择时按某些字段订购。

谢谢。

您应该尝试使用此查询。 我认为它可以帮助您获得所需的结果。

SELECT Column1 , Column2
FROM
(SELECT Column1, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn FROM Table1) AS table1_new 

INNER JOIN 

(SELECT Column2, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn FROM Table2) AS table2_new
ON table1_new.rn = table2_new.rn;

它是一个简单的查询。 让我解释一下它实际上在做什么。

我们从table1中选择column1并创建一个列rn代表table1每一行的行号

(SELECT C1 AS Column1, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn FROM Table1) AS table1_new 

然后我们在下面的查询部分对表 2 执行与上面相同的操作。

(SELECT C2 AS Column2, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn FROM Table2) AS table2_new

然后我们在生成的行号上连接这两个表。

ON table1_new.rn = table2_new.rn;  

在下面的部分中,我们从连接表中选择Column1Column2

SELECT Column1 , Column2 

尽管使用了 on 子句,我们并没有打乱列的顺序。 我希望它能回答你的问题!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM