如果匹配或第二个表中没有匹配项,如何编写SQL查询来获取记录?

时间:2016-07-25 23:53:52

标签: sql postgresql

SELECT *

  FROM apps

  INNER JOIN markets
    ON markets.app_id = apps.id
    AND markets.code = 'US'

以下查询将获取美国的应用程序:

In [13]: A = MatrixSymbol("A", 1, 3)

In [14]: A.as_explicit().norm()
Out[14]:
   __________________________
  ╱      2        2        2
╲╱  │A₀₀│  + │A₀₁│  + │A₀₂│

但是如何获得上述记录, 以及任何没有市场的应用

查询将返回应用1和2。

PostgreSQL 9.3.5,9.3.9和9.4.7

2 个答案:

答案 0 :(得分:2)

以下是outer join的一个选项:

select *
from apps
    left join markets
        on markets.app_id = apps.id
where markets.app_id is null or 
    markets.code = 'US'

答案 1 :(得分:1)

作为备注,您似乎不想要有关应用的信息,因此您可以这样做:

select a.*
from apps a
where not exists (select 1 from markets m where m.app_id = a.id) or
      exists (select 1 from markets m where m.app_id = a.id and m.code = 'US');