MySQL使用EXISTS选择计数

时间:2011-05-24 00:33:25

标签: php mysql select exists

我有3张桌子。

表1 id,thing_id

table_index ID

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 

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

1 个答案:

答案 0 :(得分: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 
相关问题