合并两个表而不连接

时间:2020-02-13 16:02:31

标签: mysql sql

我每隔几分钟就会获取和存储一次内部和外部压力读数,但是它们存储在不同的表中。此外,这些读数的确切时间也不相同。 (例如,每隔10分钟获取一次内部读数,但每5分钟获取一次外部读数,并且每次读取的时间可能每次更改几秒钟。)

内部压力表示例(请注意,此表中的时间列名为time_utc

+---------------------+----------+
|      time_utc       | pressure |
+---------------------+----------+
| 2020-02-13 00:28:51 | 1002.00  |
| 2020-02-13 00:38:49 | 1002.50  |
| 2020-02-13 00:48:55 | 1002.60  |
+---------------------+----------+

外部压力表示例

+---------------------+----------+
|        time         | pressure |
+---------------------+----------+
| 2020-02-13 00:27:32 | 1001.00  |
| 2020-02-13 00:32:04 | 1001.10  |
| 2020-02-13 00:37:34 | 1001.20  |
| 2020-02-13 00:47:59 | 1001.40  |
+---------------------+----------+

我想合并这些表,以便时间值在一列中,内部压力和外部压力值在单独的列中,按时间排序。

需要输出

+---------------------+-----------------+------------------+
|        time         | inside_pressure | outside_pressure |
+---------------------+-----------------+------------------+
| 2020-02-13 00:27:32 |                 | 1001.00          |
| 2020-02-13 00:28:51 | 1002.00         |                  |
| 2020-02-13 00:32:04 |                 | 1001.10          |
| 2020-02-13 00:37:34 |                 | 1001.20          |
| 2020-02-13 00:38:49 | 1002.50         |                  |
| 2020-02-13 00:47:59 |                 | 1001.40          |
| 2020-02-13 00:48:55 | 1002.60         |                  |
+---------------------+-----------------+------------------+

联盟尝试

我尝试了一个UNION,因为它确实结合了两个表,所以这并不是我真正需要的,它失去了内部压力和外部压力之间的区别。

UNION查询

SELECT `inside_readings`.`time_utc`, `inside_readings`.`pressure`
FROM   `mydatabase`.`inside_readings` AS `inside_readings`
UNION
SELECT `outside_readings`.`time`, `outside_readings`.`pressure`
FROM   `mydatabase`.`outside_readings` AS `outside_readings`

UNION结果

+---------------------+----------+
|      time_utc       | pressure |
+---------------------+----------+
| 2020-02-13 00:27:32 | 1001.00  |
| 2020-02-13 00:28:51 | 1002.00  |
| 2020-02-13 00:32:04 | 1001.10  |
| 2020-02-13 00:37:34 | 1001.20  |
| 2020-02-13 00:38:49 | 1002.50  |
| 2020-02-13 00:47:59 | 1001.40  |
| 2020-02-13 00:48:55 | 1002.60  |
+---------------------+----------+

JOIN尝试

我也研究了联接,但是由于每个表中没有与另一个表匹配的列,因此我不确定该如何工作。

另外,当两个表中的每个表中只有大约1,000个读数时,我运行的一些联接查询给出了数十万行(因此应提供具有2,000行的输出)。

1 个答案:

答案 0 :(得分:2)

public static void readFile() throws FileNotFoundException {
        Scanner scan = new Scanner(file);
        scan.useDelimiter("/|\\.");
        scan.nextLine(); // required because there is one empty line at .txt start

        if(scan.hasNext()) {
            GrocerieList.foodList.add(scan.next());
            scan.nextLine();
        }
        if(scan.hasNext()) {
            GrocerieList.foodAmount.add(scan.next());
            scan.nextLine();
        }
    }