• 首页
  • css3教程
  • html5教程
  • jQuery手册
  • vue手册
  • php手册
  • MySQL手册
  • apache手册
  • redis手册
  • 使用子查询进行比较

    子查询的最常见用法是:

    non_subquery_operand comparison_operator (subquery)
    

    comparison_operator这些运算符之一在哪里:

    =  >  <  >=  <=  <>  !=  <=>
    

    例如:

    ... WHERE 'a' = (SELECT column1 FROM t1)
    

    MySQL还允许这种构造:

    non_subquery_operand LIKE (subquery)
    

    一次,子查询的唯一合法位置是在比较的右侧,您可能仍然会发现一些坚持这一要求的旧DBMS。

    这是一个普通形式的子查询比较示例,您无法使用联接进行此比较。发现在表中的所有行t1的量,column1值等于在表中的最大值t2

    SELECT * FROM t1
      WHERE column1 = (SELECT MAX(column2) FROM t2);
    

    这是另一个示例,再次使用联接是不可能的,因为它涉及到对一个表进行聚合。它查找表中t1包含在给定列中出现两次的值的所有行:

    SELECT * FROM t1 AS t
      WHERE 2 = (SELECT COUNT(*) FROM t1 WHERE t1.id = t.id);
    

    为了将子查询与标量进行比较,子查询必须返回标量。为了将子查询与行构造器进行比较,子查询必须是返回与行构造器具有相同数量值的行的行子查询。请参见“ROW子查询”。