Php ';其中';当左联接返回null时,条件失败
当Php ';其中';当左联接返回null时,条件失败,php,mysql,Php,Mysql,当left join失败时,由于vlu。status=1查询不会返回任何内容。 即使左连接失败,我也希望得到结果 如果我删除vlu.status=1,它将返回右结果,但当左连接未失败时,我必须使用vlu.status=1 select vb.first_name,vb.last_name,DATE_FORMAT(vb.created_date,'%m-%d-%Y') as Created_On, concat(la.first_name,' ',la.last_name) as Loa
left join
失败时,由于vlu。status=1
查询不会返回任何内容。
即使左连接失败,我也希望得到结果
如果我删除vlu.status=1
,它将返回右结果,但当左连接未失败时,我必须使用vlu.status=1
select vb.first_name,vb.last_name,DATE_FORMAT(vb.created_date,'%m-%d-%Y') as Created_On,
concat(la.first_name,' ',la.last_name) as Loan_Agent, vl.loan_number,
count(vs.id) as Num_Deliveries from vid_borrowers vb
inner join vid_loans vl on vl.borrower_id= vb.id
left join vid_delivery_schedules vs on vs.borrower_id = vb.id
left join vid_loan_agents la on la.id=vl.loan_officer_id
left join vid_users vlu on vlu.id=la.user_id
where vb.bank_id=6
AND STR_TO_DATE(vb.created_date, '%Y-%m-%d') between '2014-12-01' and '2014-12-16'
and vlu.status=1
group by vb.first_name, vb.last_name, la.first_name, la.last_name, vl.loan_number
将条件放入联接中,并将其从WHERE子句中删除;如果条件在涉及WHERE之前失败,那么这样做将创建一个空行
...
left join vid_users vlu on vlu.id=la.user_id and vlu.status = 1
where vb.bank_id=6
AND STR_TO_DATE(vb.created_date, '%Y-%m-%d') between '2014-12-01' and '2014-12-16'
group by vb.first_name, vb.last_name, la.first_name, la.last_name, vl.loan_number
您可以通过检查空值让WHERE也处理它,但最好尽快执行筛选。这里的问题是,通过应用
左连接和其中筛选器,左连接失败的情况下vlu.status
返回空值,然后在中过滤掉(因为标准是vlu.status=1
)。您需要更改以下任一项:
WHERE ...
AND (vlu.status = 1 OR vlu.status IS NULL) -- NULL for the Left Join
或将vlu.status过滤器移至左侧连接条件
LEFT JOIN vid_users vlu on vlu.id=la.user_id AND vlu.status = 1
获取表达式列表并返回第一个非空的结果。您可以使用它将空值替换为默认值:
coalesce(vlu.status = 1, true)
我没有投你反对票:哦。。。你解决了我的问题。我正在检查右勾,但上面写着等8点minutes@ASP.NetDeveloper你知道你只能勾选一个答案,对吗?你们已经在两个答案之间切换了几分钟:)斯塔尔特尔克先生比你们更早给出答案。。。我后来看到了,所以我勾选了他的答案。。。你的答案也是right@ASP.NetDeveloper我的回答是更早;看看时间戳,05:53:19(他的)和05:52:53(我的)。。事实上,这也是他之前提到的:)