【问题标题】:MySQL Select Count with EXISTSMySQL 选择计数与 EXISTS
【发布时间】:2011-05-24 00:33:24
【问题描述】:

我有 3 张桌子。

table1 id,thing_id

table_index 身份证

table_index_info table_index_id,table1_id

table_index_info 包含 table_index 的历史记录。这个历史可以引用table1,可能很多次,也可能是0次。

我需要运行一个查询来返回 table1 中具有特定 thing_id 的所有行。 它还需要计算 table_index 中有多少行至少有 1 个 table_index_info 链接到 table1。

这是我的查询:

SELECT table1.*,
   (SELECT COUNT(i.id)
      FROM table_index i
      WHERE EXISTS (SELECT 0
                 FROM table_index_info h
                 WHERE h.table1_id = table1.id
                 AND h.table_index_id = i.id)
   ) AS indexCount

FROM table1
WHERE table1.thing_id= $thingId 

这是最好/正确的方法吗?

【问题讨论】:

    标签: php mysql select exists


    【解决方案1】:

    在这种情况下,我会使用 JOIN 而不是 EXISTS。

    SELECT table1.*,
        ( SELECT COUNT(i.id)
             FROM table_index i
             INNER JOIN table_index_info h ON h.table_index_id = i.id 
             WHERE h.table1_id = table1.id
         ) AS indexCount
    FROM table1
    WHERE table1.thing_id = $thingId 
    

    【讨论】:

    • 如果 table_index_info 上有很多很多结果,JOIN 会不会更慢?
    • 我刚刚运行了一些测试,它们都可以工作,但是当 table_index_info 中有很多行时,EXISTS 查询需要永远并且 JOIN 查询很快。你能为我解释一下吗?
    猜你喜欢
    • 2012-03-05
    • 2013-09-17
    • 2016-03-21
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多