:= 运算符在 mysql 中是啥意思?

Posted

技术标签:

【中文标题】:= 运算符在 mysql 中是啥意思?【英文标题】:What does the := operator mean in mysql?:= 运算符在 mysql 中是什么意思? 【发布时间】:2017-01-15 17:17:49 【问题描述】:

我有一个mysql 表(scho_id,school_name,school_views)。

我正在寻找一个mysql 查询以在school_views 的基础上获得rank 的学校。

我在 *** 上找到了这个解决方案。

SET @points := -1, @num := 0;
SELECT scho_id
, school_views
, @num := if(@points = school_views, @num, @num + 1) as school_rank
, @points := school_info.school_views as dummy
FROM school_info
ORDER BY school_views desc, scho_id asc;

这解决了我的问题,但我注意到此查询中有一个新运算符 :=。我很想知道这个运算符的含义和用途。

【问题讨论】:

【参考方案1】:

在 MySQL 中,:= 是一个赋值运算符:

SELECT @foo := 'bar';    // variable 'foo' now has value 'bar'
return value: 'bar'

= 是一个相等性测试:

SELECT @foo = 'hi mom'; // does variable 'foo' have the value 'hi mom';
return value: false   ('bar' == 'hi mom' -> false)

请注意,您可以使用set 查询进行相等性测试和赋值:

SET @foo = 'bar' = 'baz';

这将导致@foo 被分配false'bar' = 'baz' 的布尔结果。执行如下:

SET @foo = ('bar' = 'baz');
SET @foo = false;

【讨论】:

那么=(相等性测试运算符)如果与SET 一起使用,就可以作为赋值运算符?例如 - SET @param='some value'UPDATE 声明例如UPDATE table_name SET column_name='value' 是的。 set 中的第一个 = 进行分配。集合查询不能返回任何内容,因此让= 进行相等测试没有多大意义。该测试的结果无法返回。但是,现在这将进行测试和分配:set @foo = 'bar' = 'baz';@foo 将分配 'bar' = 'baz' 相等测试的布尔结果,例如假的。 不过,您似乎不能在 SELECT 语句中将 := 与声明的变量一起使用。

以上是关于:= 运算符在 mysql 中是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

=> 运算符在 Swift 中是啥意思?

/=/ 在 Netezza 中是啥意思?

运算符“<<”在 C# 中是啥意思?

=> 在 oracle pl sql.is 和调用运算符中是啥意思?

&在Java中是啥意思?

& 是啥意思。 (& 点)在 Ruby 中是啥意思?