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

标签 mysql sql subquery

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

这是我的简化查询:

SELECT table1.*, 
(
SELECT      table2.*
FROM        Table2 table2
WHERE       table2.key_id = table1.key_id   
)
FROM Table1 table1 

基本上,Table2 有 X 条记录,我需要在查询中拉回,我不想运行辅助查询(例如从 Table1 获取结果,然后循环这些结果,然后得到表2的所有结果)。

谢谢。

最佳答案

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

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

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

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

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

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

关于MySQL 子选择并从子选择表中返回多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49800431/

相关文章:

mysql - 如何从具有多行的两个表中获取数据到单个行中

php - 计算值的出现次数并将其作为 value_name=>occurrences 对返回

mysql - 合并 1 列并选择其他

php - 用于插入数据库的日期过滤器

mysql - 如何在MySQL的WHERE子句中使用子查询表别名

mysql - 在子查询中分组并计数

java - JDBC 关键字 WHERE 附近的语法不正确

使用 Flask 和 MySQL 的 Python 在不活动一段时间后超时

sql - 为列中的每个唯一值分配值

sql - 什么时候使用内连接,什么时候使用子查询?