MySQL 左连接子查询带 *

标签 mysql select subquery left-join

我正在将一个相当简单的查询与 JOIN 语句中的子查询组合在一起。仅当我在子查询选择中包含 * 时才有效。为什么?

这行得通

$sql = 'SELECT locations.id, title, name, hours.lobby
        FROM locations
        LEFT JOIN states ON states.id = locations.state_id
        LEFT JOIN (SELECT *, type_id IS NOT NULL AS lobby FROM location_hours) AS hours ON locations.id = hours.location_id
        GROUP BY locations.id';

这不是

$sql = 'SELECT locations.id, title, name, hours.lobby
        FROM locations
        LEFT JOIN states ON states.id = locations.state_id
        LEFT JOIN (SELECT type_id IS NOT NULL AS lobby FROM location_hours) AS hours ON locations.id = hours.location_id
        GROUP BY locations.id';

我应该这样做吗?如果您不需要所有字段,我认为 * 不是最好的?

最佳答案

试试这个(如果我正确理解你的意图,你想过滤 type_id 不为空):

   SELECT locations.id, title, name, hours.lobby
     FROM locations
LEFT JOIN states
       ON states.id = locations.state_id
LEFT JOIN (SELECT location_id, type_id AS lobby
             FROM location_hours 
            WHERE type_id IS NOT NULL) AS hours
       ON locations.id = hours.location_id
 GROUP BY locations.id';

解释是您必须在内部查询中选择外部查询中引用的所有字段。

关于MySQL 左连接子查询带 *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19553963/

相关文章:

sql - Oracle SQL 子查询——匹配多行

php - 无法重定向到 MainActivity 屏幕

mysql - rails 和 RSpec : test DB with preexisting records

Mysql:将带有数字和字母的一列拆分为两列

php - 如何在 MySQL 中使用连接

mysql - 在mysql子查询中按日期获取第一条记录和最后一条记录的值

mysql - 嵌套查询——有没有更聪明的方法

php - 是否可以在 phpmyadmin 中同时执行两个更新查询?

php - 按共同好友数搜索 - 好友系统 Mysql PHP

mysql - 在不存在连接的情况下创建查询