我有一个在mysql中有大量行数的表(虽然我正在寻找通用的SQL解决方案)
very_big_table(INT a, INT b, INT c, ...)
Run Code Online (Sandbox Code Playgroud)
我想要SELECT语句
SELECT a,
(b + c) as expression1,
(b + c + a) AS expression2 -- basically (expression1 + a)
FROM very_big_table
WHERE ...
GROUP BY a
ORDER BY a DESC
Run Code Online (Sandbox Code Playgroud)
只要表达式1很简单,这看起来很好并且易于阅读.
但是当CASE-WHEN/IFNULL()/ SUM()/ MIN()/ STRCAT()或某些运算符在这些表达式中起作用时,它很难读取和调试.
我已经完成了一些已经问过的问题,
将mysql值分配给变量内联
使用另一列的列值(SQL Server)?
如何在同一个select语句中使用条件列值?
但是,如果我使用描述的方法
SELECT a,
expression1,
(expression1 + a) AS expression2
FROM
(SELECT a,
(b + c) AS expression1
FROM very_big_table
WHERE ...
GROUP BY a) as inner_table
ORDER BY a DESC
Run Code Online (Sandbox Code Playgroud)
这工作正常,但这个查询需要花费大约70倍的时间来执行.至少只有一次,我解雇了它. …
我希望通过将天数添加到当前时间来更新列.在pseudosyntax中它将是:
UPDATE foo
SET time = current_timestamp + days::integer
Run Code Online (Sandbox Code Playgroud)
days是同一个表中的一列.
我有一张这样的桌子
childid parentid
------------------------
1 0
2 1
3 2
4 2
5 3
6 4
7 0
8 7
9 8
10 1
Run Code Online (Sandbox Code Playgroud)
如果我将childid设为5,那么parentid将为1(输出)
如果我将childid设为9,那么parentid将为7.(输出)
即根parentid为0,查询应该停在那里.
如何解决这样的查询?
请帮忙.