SELECT * FROM t1 WHERE ROW(1,2) = (SELECT column1, column2 FROM t2);
这句是什么意思

解决方案 »

  1.   

    行子查询是一个能返回一个单一行的子查询变量,因此可以返回一个以上的列值。以下是两个例子:SELECT * FROM t1 WHERE (1,2) = (SELECT column1, column2 FROM t2);
    SELECT * FROM t1 WHERE ROW(1,2) = (SELECT column1, column2 FROM t2);
    如果在表t2的一个行中,column1=1并且column2=2,则查询结果均为TRUE。表达式(1,2)和ROW(1,2)有时被称为行构造符。两者是等同的,在其它的语境中,也是合法的。
    例如,以下两个语句在语义上是等同的(但是目前只有第二个语句可以被优化):  SELECT * FROM t1 WHERE (column1,column2) = (1,1);
      SELECT * FROM t1 WHERE column1 = 1 AND column2 = 1;行构造符通常用于与对能返回两个或两个以上列的子查询进行比较。例如,以下查询可以答复请求,“在表t1中查找同时也存在于表t2中的所有的行”:
    SELECT column1,column2,column3
    FROM t1
    WHERE  (column1,column2,column3) IN (SELECT column1,column2,column3 FROM t2);