在阅读MySQL文档MySQL documentation
时,我有点困惑 A row subquery is a subquery variant that returns a single row and can thus return more than one column value. Legal operators for row subquery comparisons are:
= > < >= <= <> != <=>
对于“ =”文档提供了很好的解释:
SELECT * FROM t1 WHERE (column1,column2) = (1,1);
is same as:
SELECT * FROM t1 WHERE column1 = 1 AND column2 = 1;
但是“>”或“ <”如何比较两行?此操作员的“普通”变量是什么?
create table example(a integer,b integer);
insert into example values (1,1);
insert into example values (1,2);
insert into example values (2,1);
select * from example where (a,b) > (1,1)
a | b
-----
1 | 2
2 | 1
游乐场:http://www.sqlfiddle.com/#!9/88641/2
p.s .:
答案 0 :(得分:0)
MySQL和PostgreSQL具有相同的行为,让我们阅读postgres documentation
=和<>情况与其他情况略有不同。如果两行的所有对应成员均为非null且相等,则认为两行相等;如果任何相应的成员为非空且不相等,则行不相等;否则,行比较的结果未知(空)。
对于<,<=,>和> =情况,行元素从左到右进行比较,一旦发现不相等或为空的元素对就停止。如果这对元素中的任何一个为null,则行比较的结果未知(null);否则,结果为null。否则,这对元素的比较确定结果。例如,因为未考虑第三对元素,所以ROW(1,2,NULL)
|
所以(a,b)=(c,d)的评估为 a = c和b = d
但是(a,b,)<(c,d)评估为 a
看起来很奇怪。而且我不知道如何评估具有3个以上其他属性的行的比较;