任何人都可以告诉我如何在不使用左连接的情况下编写等效的左连接.
Select * from a left join b on a.name = b.name.
解决方法
请记住,sql的外连接是一种关系联合,它专门用于投影空值.如果你想避免使用null值(在我看来是一件好事),你应该避免使用外连接.请注意,现代关系语言完全没有使用null和outer连接的概念.
这个外连接:
SELECT DISTINCT T1.id,T1.value,T2.other_value FROM T1 LEFT OUTER JOIN T2 ON T1.id = T2.id;
SELECT T1.id,T2.other_value FROM T1 INNER JOIN T2 ON T1.id = T2.id UNION SELECT T1.id,NULL FROM T1 WHERE NOT EXISTS ( SELECT * FROM T2 WHERE T1.id = T2.id );
第二个查询可能看起来很长,但这只是因为sql的设计/演变方式.以上只是一个自然的联合,一个联盟和一个半联盟.但是,sql没有semijoin运算符,如果您的产品没有实现标准sql的NATURAL JOIN语法,则要求您在SELECT子句中指定列列表并编写JOIN子句,这会导致很多代码表达非常简单的内容.