mysql 行构造函数语法

标签 mysql row

很抱歉这个菜鸟问题,但我在文档中找不到任何线索。 以下两个查询是等价的:

SELECT * FROM t1 WHERE (column1,column2) = (1,1);
SELECT * FROM t1 WHERE column1 = 1 AND column2 = 1;

那么这是否意味着下面的两个查询是等价的?

SELECT (1,2) = (1,2); #returns 1
SELECT 1 = 1 AND 2 = 2; #returns 1

太棒了,如果我使用“>”而不是“=”会发生什么?

SELECT (3,0) > (2,2); # returns 1, whaaaaaat?
SELECT 3 > 2 AND 0 > 2; # returns 0, like expected

那里发生了什么?为什么他们不一样?!?!我测试了其他查询...

SELECT (3,0) > (2,2); # 1
SELECT (0,3) > (2,2); # 0
SELECT (3,4) > (3,2);# 1
SELECT (3,0) > (3,2);# 0
SELECT (3,2,1) > (3,2,0); # 1
SELECT (3,2,0) > (3,2,0); # 0

看起来 mysql 将他的所有参数都视为一个大数! 我在文档中搜索了 ROW CONSTRUCTOR SYNTAX,但我找不到任何关于此的线索! 我在这里错过了什么?

最佳答案

关于 comparison operators 的文档说:

For row comparisons, (a, b) > (x, y) is equivalent to:

  (a > x) OR ((a = x) AND (b > y))

所以 (3, 0) > (2, 2) 为真,因为 3 > 2

这种工作方式类似于使用 ORDER BY col1, col2 时对行进行排序的方式。它基本上告诉您 col1 = a, col2 = b 的行是否会排在 col1 = x, col2 = y 之后。

关于mysql 行构造函数语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43057301/

相关文章:

mysql - 选择日期问题

r - 选择变量值等于某个向量的行

mysql - 合并 SQL 中同一列的行

html - 将 div 包装到新行导致有趣的行为

java - 将更新发布到 "a"墙

MySQL 5.1.41 前导零被删除

mysql - 在 mysql v3 中将行转换为列

Excel 组功能 - 插入行

php - Laravel Route 无法工作错误是尝试获取非对象的属性

mysql - Laravel 数据库命令中的多个点赞