假设我在某张桌子上有很大的选择.使用复数logc计算列的一个值,并将其称为ColumnA.现在,对于另一列,我需要来自ColumnA的值并向其添加一些其他静态值.
示例SQL:
select table.id, table.number, complex stuff [ColumnA], [ColumnA] + 10 .. from table ...
Run Code Online (Sandbox Code Playgroud)
在[ColumnA] + 10是什么即时寻找.复杂的东西是一个巨大的案例/何时阻止.
想法?
我有一个返回表的函数.
如果运行SELECT * FROM some_function(12345)结果是:
object_id | name
----------------
12345 | "B"
Run Code Online (Sandbox Code Playgroud)
如果运行SELECT some_function(12345)结果是:
some_function
-------------
(12345,"B")
Run Code Online (Sandbox Code Playgroud)
问题是我想要原始表单(以便我可以访问单个列值),但让参数some_function()来自表中的列.我可以执行,SELECT some_function(thing_id) FROM things但这会返回:
some_function
-------------
(12345,"B")
(12346,"C")
(12347,"D")
Run Code Online (Sandbox Code Playgroud)
而我想要的回报是:
object_id | name
----------------
12345 | "B"
12346 | "C"
12347 | "D"
Run Code Online (Sandbox Code Playgroud)
那么如何"不必要"或"扩展"这样一个浓缩的行呢?
我曾经用mysql开发一切,本周有机会与postgresql一起工作,为什么不呢!
我总是被告知postgresql有更大的功能集.
我读了一些wiki,但大部分信息都已经过时了.
我失踪的最佳功能是什么?像部分索引等.
另外,我会想念mysql的东西?
我有类似的东西
(COMPLEX_EXPRESSION_N代表长子查询)
select
ID_Operation,
FirstCheck = CASE WHEN (COMPLEX_EXPRESSION_1)= 0 then 0 else 1 end,
SecondCheck = CASE WHEN (COMPLEX_EXPRESSION_2)= 0 then 0 else 1 end,
ThirdCheck = CASE WHEN (COMPLEX_EXPRESSION_3)= 0 then 0 else 1 end,
AllChecksOk = Case WHEN
(FirstCheck + SecondCheck + Third CHeck = 3)
Then 'OK' Else 'No' End
from
AllOperationsTable
Run Code Online (Sandbox Code Playgroud)
是否可以像在AllChecksOk系列中那样使用FirstCheck,SecondCheck,ThirdCheck?
我不关心性能,这是每天在非常少量的记录上手动运行的东西,我只是想避免创建视图,表或临时表并将所有内容保存在单个select语句中.
作为一个altenrative,我可以做到这一点,但它使查询的可读性降低(因为我需要为每个复杂的表达式编写两次):
select
ID_Operation,
FirstCheck = CASE WHEN (COMPLEX_EXPRESSION_1)= 0 then 0 else 1 end,
SecondCheck = CASE WHEN (COMPLEX_EXPRESSION_2)= 0 …Run Code Online (Sandbox Code Playgroud)