如何在SQL中查询有两种不同情况的数据库?

时间:2016-12-05 18:45:08

标签: postgresql

假设我有一个使用PostgreSQL的数据库与 TableA

{Name, Value, Id}    
{Bob, 0, 101}    
{Frank, 1, 102}    
{Jeff, 2, NULL}    
{Paul, 3, 103}

TableB

{Name, Value, Id}
{Bob, 0, 100}
{Bob, 0, 101}
{Frank, 1, 100}
{Frank, 1, 102}

我想做

FROM TableA INNER JOIN TableB 
ON TableA.Id=TableB.Id

但是,TableB不显示Id = NULL的数据。

我想返回

{Bob, 0, 101}
{Frank, 1, 102}
{Jeff, 2, NULL}

我该怎么做?

3 个答案:

答案 0 :(得分:0)

使用 EXISTS

<强>查询

select * from TableA a
where exists(
    select 1 from TableB b
    where a.Id = b.Id
)
or a.Id is null;

SQL Fiddle demo

答案 1 :(得分:0)

<强> Sql DEMO

SELECT A.*
FROM TableA A
JOIN TableB B
  ON A.Name = B.Name
 AND A.Value = B.Value 
 AND A.Id = B.Id

UNION ALL

SELECT A.*
FROM TableA A
WHERE A.Id IS NULL

<强>输出

enter image description here

答案 2 :(得分:0)

使用left加入,而不是innerinner要求left表和right匹配。 NULL将无法匹配。

select a.name, a.value, a.id FROM a 
left JOIN b 
ON a.Id = b.Id

演示:http://sqlfiddle.com/#!9/24b08/4

输出:

Name    Value   Id
Bob     0       101
Frank   1       102
Jeff    2       (null)