MySQL子选择并从子选择表返回多个记录

时间:2018-04-12 15:27:12

标签: mysql sql subquery

我不知道这是否可行,但mysql可以做一个子选择并检索多条记录吗?

这是我的简化查询:

  function compress(file) {
    return new Promise((resolve, reject) => {
       new ImageCompressor(file, {
         quality: .6,
         success: resolve,
         error: reject
      });
   });
 }

基本上,Table2有X量的记录,我需要在查询中回退,我不想运行二级查询(例如从Table1获取结果然后循环这些结果然后获取表2中的所有结果。

感谢。

2 个答案:

答案 0 :(得分:2)

没有。 SELECT子句中的子查询称为标量子查询。标量子查询有两个重要属性:

  • 它只能检索一列。
  • 它只能检索零行或一行。

标量子查询 - 顾名思义 - 替换表达式中的标量值。如果子查询不返回任何行,则表达式中使用的值为NULL

在您的情况下,您可以改为使用LEFT JOIN

SELECT t1.*, t2.*
FROM Table1 t1 LEFT JOIN
     Table2 t2
     ON t2.key_id = t1.keyid;

请注意,表别名是一件好事。但是,它们应该使查询更简单,因此重复表名不是一个大赢家。

答案 1 :(得分:1)

MySQL可以执行返回多行或多列的子查询,但在标量上下文中执行此操作无效。

您将子查询放在标量上下文中。换句话说,在select-list中,子查询必须返回一列和一行(或零行),因为它将用于相应行上的一个项目,因为它使用select-list来构建结果。 / p>