mysql - 如何编写简单的 MySQL 工作台查询

标签 mysql sql mysql-workbench

我有 1 个包含 3 列的表。 id (auto_increment)、column0、column1 像这样:

+----+--------+---------+
| id | column0| column1 |
+----+--------+---------+
| 1  | 1.1111 | 0.1111  |
| 2  | 1.2222 | 0.2222  |
| 3  | 1.3333 | 0.3333  |
| 4  | 1.4444 | 0.4444  |
| .  | 1.5555 | 0.5555  |
+----+--------+---------+

我想选择这个:

+--------+---------+
| column0| column1 |
+--------+---------+
| 1.1111 | 0.2222  |
| 1.2222 | 0.3333  |
| 1.3333 | 0.4444  |
| 1.4444 | 0.5555  |
| 1.5555 | 0.5555  |
+--------+---------+

如何将这两个查询连接到一个查询中? 有人可以为我编写代码吗?

SELECT column0 FROM table;

第二个查询

SELECT column1 FROM table where id >1
union all
(SELECT column1 FROM table
ORDER BY id DESC 1);

最佳答案

使用自加入

SELECT t1.column0, IFNULL(t2.column1, t1.column1) AS column1
FROM table AS t1
LEFT JOIN table AS t2 ON t1.id = t2.id - 1

需要LEFT JOINIFNULL来处理最后一行。您也可以使用 UNION

来做到这一点
SELECT t1.column0, t2.column1
FROM table AS t1
INNER JOIN table AS t2 ON t1.id = t2.id - 1
UNION
(SELECT column0, column1
 FROM table
 ORDER BY id DESC
 LIMIT 1)

DEMO

请注意,这仅在 id 序列中没有间隙的情况下才有效。当存在间隙时查找下一行更加复杂。您可以搜索 SO 来查找显示如何执行此操作的解决方案。

关于mysql - 如何编写简单的 MySQL 工作台查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35636299/

相关文章:

mysql - 如何创建MySQL分层递归查询

mysql - SUM 时间值 MySQL

mysql - 从 HTML/MS Word 标签中清除数据库

php - 消息: Undefined variable and Invalid argument supplied for foreach() in Codeigniter

sql - 整数代理键?

mysql - 更新具有匹配模式的多列的表

mysql - 将许多 txt 文件加载到 mysql 数据库

PHP 更改 MySQL 行顺序

sql - oracle查询中如何获取字符串的前两个字符?

python - 未使用 WAMP SERVER Django/Mezzanine 在 MYSQL 中创建表