【问题标题】:Mysql query. What is the difference between Join and a SubQuery?mysql查询。 Join 和 SubQuery 有什么区别?
【发布时间】:2010-12-11 18:00:44
【问题描述】:

我总是虽然 join 得到某些结果,然后只使用这些结果进行连接。

SELECT * FROM tbl AS t1
JOIN tbl2 AS t2 ON t1.id = t2.foreignId 
JOIN tbl3 AS t3 ON t2.id = t3.foreignId
WHERE t1.date > SOMEDATE

据我了解,它将运行 where 语句并仅获取日期范围内的结果。然后它将遍历所有 t2 并且仅尝试匹配连接到 t1 的 id(这可能会使结果更小)。然后使用这个较小的潜在结果,它将对 T3 执行相同的操作并输出最终结果。

但它似乎不是这样工作的?并且表格成倍增加而不是变小。显然我上面描述的更像是子查询? (注意我说的是 LIKE。我不知道子查询是如何工作的)

JOIN 是如何工作的,JOIN 和子查询有什么区别?

我同时使用 MySql 和 SQLite。我不知道那是否相关。

【问题讨论】:

  • 这不是 MySQL 问题。它通常适用于任何 SQL 数据库。 (与该用户发布的大多数类似问题一样......)

标签: sql mysql sqlite join subquery


【解决方案1】:

如果子查询中使用的表返回了两次值,则 JOIN 也将返回匹配的行两次,而 IN 或 EXISTS 条件将只返回一次。

JOIN 往往具有更好的性能,但在某些情况下可能并非如此,尤其是每个数据库(包括版本)。

参考:

【讨论】:

    【解决方案2】:

    子查询示例

    SELECT * 
    FROM (
        SELECT * FROM tbl1 WHERE date > SOMEDATE
    )
    AS t1
    JOIN tbl2 AS t2 ON t1.id = t2.foreignId 
    JOIN tbl3 AS t3 ON t2.id = t3.foreignId
    

    db 引擎的执行方式实际上取决于它的优化器。尝试在查询前面放置一个EXPLAIN 以查看数据库引擎在做什么。许多变量都会被考虑在内,包括索引、表大小等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 2010-10-28
      相关资源
      最近更新 更多