Question

I saw answers to a related question, but couldn't really apply what they are doing to my specific case.

I have a large table (300k rows) that I need to join with another even larger (1-2M rows) table efficiently. For my purposes, I only need to know whether a matching row exists in the second table. I came up with a nested query like so:

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

Is there a better and/or more efficient way to do it?

Thanks!

Was it helpful?

Solution

You just want a left outer join:

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
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top