困惑已久的问题,关于right join 和where的冲突
例如
select * from t1
inner join t2 on ....
inner join t3 on ....
right join t4 on ....
where t1.name= '... ' and t1.date= '... '
就是说,我的预期是保留表t4所有记录,但是where条件会过滤掉t4的记录,而where又是t1的条件筛选
我现在的一个办法是把t4放在from后面,使用left join,但还有没有其他的办法呢?
谢谢!
------解决方案--------------------不是where的问题,是执行时的顺序就是这样的
------解决方案--------------------要么这样
select * from (select * from t1
inner join t2 on ....
inner join t3 on .... where t1.name= '... ' and t1.date= '... ') t
right join t4 on ....
------解决方案--------------------select * from
(
select * from t1
inner join t2 on ....
inner join t3 on ....
where t1.name= '... ' and t1.date= '... '
) as t
right join t4 on .... --注意这里....中对t1 t2 t3的引用都要改成t
------解决方案-------------------- --用子查询
select * from
(select * from t1 where name= '... ' and date= '... ') A
inner join t2 on ....
inner join t3 on ....
right join t4 on ....
------解决方案--------------------1 2楼好快
------解决方案--------------------哼哼~~
------解决方案--------------------这样试试看,先把123连好,然后再right join T4,
select * from
(select * from t1 where t1.name= '... ' and t1.date= '... '
inner join t2 on ....
inner join t3 on ....) tt
right join t4 on ....
------解决方案--------------------晕,
都是霹雳闪电手啊~,迅雷不及掩耳盗铃~
------解决方案--------------------先把表1筛选玩再联接呗