SQL双向加入
回答
使用full join
子句和null
检查使用任何可用的功能在你的DBMS(如isnull
或3210),例如:
select isnull(t1.id, t2.id), isnull(t1.a, 0), isnull(t2.b, 0)
from table1 t1
full join table2 t2 on t2.id = t1.id
感谢快速回答Kirill 它对我来说就像一个魅力! – 2012-03-18 07:06:15
@YosiHavia,欢迎光临。 – 2012-03-18 07:06:51
这将做到这一点对Oracle和SQL Server;
SELECT COALESCE(a.id, b.id), COALESCE(a.a, 0), COALESCE(b.b, 0)
FROM table1 a
FULL OUTER JOIN table2 b
ON a.id=b.id
对于缺少OUTER JOIN的MYSQL,您需要对其进行更改;
SELECT a.id, COALESCE(a.a, 0), COALESCE(b.b, 0)
FROM table1 a LEFT JOIN table2 b ON a.id=b.id
UNION
SELECT b.id, COALESCE(a.a,0), COALESCE(b.b, 0)
FROM table1 a RIGHT JOIN table2 b ON a.id=b.id
FULL OUTER JOIN解决方案已发布。
对于不支持FULL OUTER JOIN(例如MySQL)的数据库,也发布了使用UNION的版本。
最好修改UNION查询来使用UNION ALL。诀窍是确保第二个外连接表的NOT NULL列为NULL。
select table1.id table1.a, coalesce(table2.b,0) as b
from table1
left outer join table2 on table2.id=table1.id
union all
select table2.id coalesce(table1.a,0) as a, table2.b
from table2
left outer join table1 on table1.id=table2.id
where table1.id is null
的UNION ALL溶液甚至可以是用于支持FULL OUTER JOIN数据库有用。我看到甲骨文用一个完整的OUTER JOIN表现糟糕的表现,而上面的UNION ALL解决方案像一个魅力。
- 1. 双左加入SQL?
- 2. 条件双向加入?
- 3. SQL Max和双加入
- 4. 插入双向量
- 5. SQL双重加入排序依据
- 6. PHP双向加密
- 7. SQL Azure和双向电力
- 8. SQL Server双向级联?
- 9. PHP双向加密加密
- 10. AES双向加密加盐
- 11. MySQL双表加入双表
- 12. JPA ManyToMany双向插入
- 13. 插入双向链表
- 14. Laravel输入双重定向
- 15. Hadoop多个输入错误分组 - 双向加入练习
- 16. php中的双向加密
- 17. 添加到双向链表
- 18. 急于在“双向”加载
- 19. 向对方添加双打
- 20. Java双向加密库
- 21. 双向加密+查找?
- 22. 双内加入DB
- 23. 双向到VHDL双向
- 24. OneToOne双向双向关联
- 25. 插入双Sql服务器
- 26. 向SelectionListener添加双向功能
- 27. XMPP:向pubsub添加双向性?
- 28. 方向(My)SQL左/右/内部加入
- 29. SQL复杂的双向分层关系
- 30. SQL构造一个双向图
你正在使用哪些DBMS? – 2012-03-18 07:01:17