检查postgres中多个记录是否存在行的有效方法

时间:2014-03-27 08:18:04

标签: sql postgresql select query-optimization postgresql-9.3

我看到了相关question的答案,但无法将他们正在做的事情应用于我的具体案例。

我有一个大表(300k行),我需要有效地与另一个更大(1-2M行)的表连接。出于我的目的,我只需要知道第二个表中是否存在匹配的行。我提出了一个嵌套查询,如下所示:

SELECT 
  id, 
  CASE cnt WHEN 0 then 'NO_MATCH' else 'YES_MATCH' end as match_exists
FROM 
  (
   SELECT 
     A.id as id, count(*) as cnt
   FROM
     A, B
   WHERE 
     A.id = B.foreing_id
   GROUP BY A.id
  ) AS id_and_matches_count

有更好和/或更有效的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

你只想要一个左外连接:

SELECT 
   A.id as id, count(B.foreing_id) as cnt
FROM A
LEFT OUTER JOIN B ON
    A.id = B.foreing_id
GROUP BY A.id