根据下面的查询,您可以看到查询只返回匹配的行,但我想从USERS表中检索所有行并null代替不匹配的行。select u.*, p.p_title, DATE_FORMAT(max(trans.expiry), '%d-%m-%Y %H:%i:%s') as expiry_date,cn.cell_num from ( select t.e_date as expiry from connections c, trans_tbl t,users u where c.v_lan_id=t.vlanconfk and u.u_id = t.u_id_fk) AS trans,users u INNER JOIN connections c on u.u_id=c.u_id_fkINNER JOIN packages p on c.pkg_id_fk=p.pkg_idINNER JOIN cell_num cn on u.u_id=cn.u_id_fk
1 回答
牛魔王的故事
TA贡献1830条经验 获得超3个赞
我认为你正在寻找left join
s。但是,您的查询还有其他几个缺陷:
您正在混合显式和隐式连接;始终使用显式连接(使用关键字
on
)select
您在子句 ( )中有一个聚合函数max()
以及非聚合列,但没有group by
子句子查询的目的相当不清楚:它使用了外部查询中使用的几个表,这没有什么意义,而且可能不是最优的
我怀疑您可以将其表述为:
select
u.*,
p.p_title,
(
select date_format(max(t.expiry), '%d-%m-%y %h:%i:%s')
from trans_tbl t
where t.vlanconfk = c.v_lan_id and t.u_id_fk = u.u_id
) expiry
cn.cell_num
from users u
left join cell_num cn on cn.u_id_fk = u.u_id
left join connections c on c.u_id_fk = u.u_id
left join packages p on c.p.pkg_id = pkg_id_fk
- 1 回答
- 0 关注
- 111 浏览
添加回答
举报
0/150
提交
取消