当前位置: 首页 > 知识库问答 >
问题:

SQL-连接两个选择结果水平

颛孙镜
2023-03-14

我使用两个SELECT语句创建以下两个临时表t1和t2:

+------+------+
| Col1 | Col2 |
+------+------+
| A    |    1 |
| B    |    2 |
| C    |    3 |
+------+------+

+------+------+
| Col3 | Col4 |
+------+------+
| C    |    5 |
| D    |    6 |
| E    |    7 |
+------+------+

两个SELECT语句本质上总是返回相同数量的行。现在,我想水平连接/组合这两个结果,以获得以下输出表:

+------+------+------+------+
| Col1 | Col2 | Col3 | Col4 |
+------+------+------+------+
| A    |    1 | C    |    5 |
| B    |    2 | D    |    6 |
| C    |    3 | E    |    7 |
+------+------+------+------+

我尝试使用多个JOIN语句,但可以找到一种聪明的方法。我还尝试了UNION语句,它提供了垂直连接,但没有提供所需的水平版本。

这里有两个简单的选择语句,用于更好地定位可能的解决方案:

SELECT * FROM `t1` WHERE date = DATE(NOW())

SELECT * FROM `t2` WHERE date = DATE(NOW())

提前感谢您的帮助。

共有2个答案

岳浩宕
2023-03-14

正在为关系创建虚拟ID。但这不是推荐的方法。

SELECT col1, col2, col3, col4 FROM 
    (SELECT t1.*, (@t1VID := @t1VID + 1) t1VID  FROM t1 , (SELECT @t1VID := 0) d) e 
        JOIN (SELECT t2.*, (@t2VID := @t2VID + 1) t2VID FROM t2, (SELECT @t2VID := 0) a ) b ON t1VID  = t2VID
        JOIN (SELECT @t1VID := 0) c ;

理想的解决方案是在表之间添加适当的关系。如果没有,最好单独查询,并在应用层进行必要的连接

钱哲茂
2023-03-14

试试这个

SET @row_number_t1:=0;
SET @row_number_t2:=0;

SELECT t1_modif.*, t2_modif.* FROM 
    (SELECT @row_number_t1:=@row_number_t1+1 AS row_number,
            t1.* FROM t1) 
    t1_modif
JOIN (SELECT @row_number_t2:=@row_number_t2+1 AS row_number,
            t2.* FROM t2) 
    t2_modif ON t2_modif.row_number = t1_modif.row_number

请注意,顺序是不保证的,要做到这一点,请在每个< code>FROM t1和< code>FROM t2子查询的末尾添加< code>ORDER BY子句,基本上我们是通过row_number连接的,因为MySQL没有ROW_ID、ROW_NUM(类似于mssql、oracle、postgres ),我们使用了会话变量

 类似资料:
  • 问题内容: 我有三个SQL选择,需要将它们的结果加在一起。这三个中的两个使用相当复杂的联接。 我需要的是所有三个值的总和。 。无论如何,是否可以在单个语句中执行此操作? 问题答案: 你可以的。 请勿使用,因为它会忽略重复的值(会导致)。

  • 我有两个针对同一个表的select查询,这两个查询在select部分中都只包含一个< code>sum(),但是在< code>where子句中有所不同。我需要做的是对两个查询的结果求和。 查询示例: 我需要的是像这样的东西 其中选择和,如我的示例查询中所示。 我试着回答这个问题,但没能成功。我还尝试用替换字段,但这不起作用,因为不允许在中使用

  • 问题内容: 我需要根据其他几个表中的某些匹配值从一个表中选择结果。我有以下表格: 我需要返回每个团队的所有教练和球员的姓名。我只使用过内部联接,似乎无法在此处使用那些内部联接,所以知道如何执行此操作吗? 问题答案: 这将为您提供教练: 这将为您提供球员: 因此,非优雅,简单的答案就是将所有内容与一起扔掉。

  • 我有两张桌子 客户(ID,First_Name,Last_Name,地址); 订单(ID,Product_Name,价格,Order_Date日期,Customer_ID,金额); 我必须选择客户的姓氏以及他们的订单数量。 select请求的输出必须是

  • 有一个表格,其中包含一些答案。一个答案是true(字段tf=1),几个是false(字段tf=0)。如何选择1个真答案和N个假随机答案?结果必须是随机顺序的。这是我的例子,它的工作原理,但真正的答案总是在第一行:

  • 我需要连接来自两个不同表的数据,如下所示。仅使用一个sql查询就可以做到这一点吗?如果“key”和“name”在两个表上,那么它们是相同的。表1中的“状态”始终为“-”,表2中的“T”。此外,两个表上的“名称”和“comp”都匹配(例如:Name3-C和Name4-B)<我尝试过“联合”和“加入”,但还没有解决办法! 表1 表2 结果应该是。。。 提前谢谢!