我有一堆包含大量列的表,但我们只需要查看其中的两列。我正在尝试在这个表上加入另一个表,但是我们对这两个列的所有了解都是一个是null而另一个不是:
client_id | note_id
如果client_id
为空,主表想要clients.id
或note_id
notes.id
加入clients.id
(如果不为空)。
答案 0 :(得分:1)
您可以在join on子句中使用coalesce。在这里看演示: http://sqlfiddle.com/#!9/99911/2。如果客户端id为null,则使用note id连接table1和table2。
Select t1.client_id, t1.note_id,t2.client_id, t2.note_id
From table1 t1
Join table2 t2
on coalesce(t1.client_id, t1.note_id) =coalesce(t2.client_id, t2.note_id)
答案 1 :(得分:1)
假设涉及3个表(主表包含client_id
和note_id
列,clients
表和notes
表),您可以使用查询等这样:
(select *
from mainTable inner join clients on mainTable.client_id = clients.id)
union
(select *
from mainTable inner join notes on mainTable.note_id = notes.id
where mainTable.client_id is NULL);
上面的查询包含2个查询,其中每个查询将输出连接列不为空的行。然后使用union
将结果合并。
答案 2 :(得分:1)
这对你有用。这是我写的非常基本的查询。如果需要,可以进行更改。
SELECT * FROM YOUR_TABLE t
LEFT OUTER JOIN clients c ON t.client_id = c.id
LEFT OUTER JOIN notes n ON t.note_id = n.id
WHERE c.id IS NOT NULL OR n.id IS NOT NULL