有一个句子
select a.* from a,b
where a.user_id=b.user_Id(+)
and b.bj(+)=1
and b.user_id is null;
结果是从a表滤除了b表中bj=1后的资料,求关于(+)和不用(+)混合的写法相关解释、教程及经验。
不是(+)的简单用法,是混合用法,大家看最后一行没有用(+),混合结果不是左连接,而是滤除。
sunchongkai505 的最后一个and应当改成where,和我的结果就一致了
select a.* from a left join b on a.user_id=b.user_id and b.bj=1 where b.user_id is null;
好像是先进行左链接然后再取b.user_id is null这个条件,而并列的连接是先条件,后链接,其实就是运算顺序的问题,好像有点儿道理吧。
<p>右边有(+)就是左外联结,左边有(+)就是右外连接,左外联结就是把左边表所有数据全部展现,不管是否符合条件,右边表则展现符合条件的数据,右外连接相反。
你的sql相当于:
select a.* from a left join b on a.user_id=b.user_id and b.bj=1 and b.user_id is null;追问好像描述没有明白我的意思, 按照你的sql永远都是null
追答可能我是答非所问了,刚看你补充说明,但是我这个sql不会永远都是null啊,除非a里面没有数据。