MySQL 5.7中有一个查询:
SELECT * FROM
(
SELECT (@rowNum:=@rowNum+1) AS rowNo,t.* FROM table_target t,(SELECT (@rowNum :=0)) AS b
WHERE p_d = '2020-11-08'
ORDER BY kills DESC
) t
WHERE t.uid= '8888'
运行此查询,没有异常,但是B列消失,并且如果在外部查询中使用select b from
,它将返回unknown column
异常。
我有2个问题:
(SELECT (@rowNum :=0))
不出现?(@rowNum:=@rowNum+1)
与row_number() over ()
等价吗?如果是这样,如何理解它... 谢谢您的帮助。
此外,我刚刚发现是否将(SELECT (@rowNum :=0) )
放在左侧:
...
SELECT (SELECT (@rowNum :=0) ) AS b, (@rowNum:=@rowNum+1) AS rowNo , t.* FROM table_target t
...
然后行号列不再增加,为什么会发生这种情况?
答案 0 :(得分:1)
您在这里问了3个问题:
问题1:为什么没有出现(SELECT(@rowNum:= 0))?
答案:您已将(SELECT (@rowNum :=0)) as B
用作连接它的表,但没有在select
之后的列列表中调用它。这就是为什么它不在输出中显示它的原因。您将其称为(@rowNum:=@rowNum+1)
,它表示从1
开始的增量表示之后的值。
问题2:在Oracle中,(@rowNum:= @ rowNum + 1)是否等于row_number()而不是()?如果是这样,怎么理解
答案:是的,它是等效的。 MySql 8.0 and above
也支持此功能(称为窗口功能)。它的工作方式是:
(SELECT (@rowNum :=0))
变量@rowNum
将被初始化为值0
。(@rowNum:=@rowNum+1)
时,它将在@rowNum
中加1并为select查询返回的每一行分配给它自己。
这样将打印行号。问题3:是否将(SELECT(@rowNum:= 0))放在左侧:
答案::如果将(SELECT (@rowNum :=0) )
作为字段列表放在select
之后,则它将在每个@rownum
中将0
的值初始化为 img{
width: 100%;
height: 500px;
}
.dropdown-menu{
background-color: #49f357;
}
.dropdown-menu{
right: 0 !important;
}
.dropdown-toggle{
background-color:#2de03c;
}
.dropdown-toggle > .active { color: aqua;}
.dropdown-toggle:hover {background-color: #0eb41c;}
.dropdown-menu > .active > a,.dropdown-menu > .active > a:hover.dropdown-menu > .active > a:focus {color: white!important; background-color: #e7e7e7!important;}
.dropdown-item{
background-color: #2de03c;
}
.dropdown-menu-center {
left: 50% !important;
right: auto !important;
text-align: center !important;
transform: translate(-50%, 0) !important;
}
.textwhite{
color:white ;
}
.collapse ul.navbar-nav> .nav-item > a {
color: white;
}
/* The container <div> - needed to position the dropdown content */
.dropdown {
position: relative;
display: inline-block;
}
.nav-collapse.collapse {
display: none !important;
height: auto !important;
overflow: visible !important;
}
.navbar{
position: sticky
}
select返回的行。这就是为什么您不会获得增值的原因。
答案 1 :(得分:1)
列“消失”,因为值为undefined
。 MySQL不保证NULL
中表达式的求值顺序,初始化可能不起作用。
第二,即使变量起作用,您的代码也无法实现预期的目标,因为变量可能不遵守SELECT
。我想你打算:
ORDER BY
可能有更好的方法来做您想要的事情。但是您的问题是关于变量和MySQL 5.7的。