假设我有一个使用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}
我该怎么做?
答案 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
<强>输出强>
答案 2 :(得分:0)
使用left
加入,而不是inner
。 inner
要求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)