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

时间:2016-03-20 17:09:07

标签: mysql

我需要一个SQL语句,它允许我从一个表中获取一列,从另一个表中获取一列,并将它们并排显示。我一直在仔细阅读有关JOIN的文献,但他们似乎总是需要一个" on"我不感兴趣的条款。

我发现的最接近的事情是" NATURAL JOIN",但是这似乎输出了一个结果,它给出了第2列中第1列每行的所有行。任何想法?

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

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

2 个答案:

答案 0 :(得分:3)

您可以尝试此查询:

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 FIDDLE DEMO

<强>解释

我在此查询中使用了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

现在,您可以在这两个表(INNER JOIN)之间创建i.e. row_number

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

from_Table1     from_Table2

0                   a
1                   b 
2                   c

<强>注意:

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

谢谢。

答案 1 :(得分:0)

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

Navigator

它是一个简单的查询。让我解释一下它的实际作用。

我们正在从表1 中选择 column1 ,并在每行的 rn 列中代表行号 表1

MaterialApp

然后,在下面的查询部分中,我们与表2的操作相同。

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;

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

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

在下面的部分中,我们从联接表中选择 Column1 Column2

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

尽管使用on子句,我们也不会干扰列的顺序。我希望它能回答您的问题!