为了账号安全,请及时绑定邮箱和手机立即绑定

从匹配行和非匹配行中检索数据

从匹配行和非匹配行中检索数据

PHP
HUX布斯 2023-03-26 14:43:46
根据下面的查询,您可以看到查询只返回匹配的行,但我想从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 joins。但是,您的查询还有其他几个缺陷:

  • 您正在混合显式和隐式连接;始终使用显式连接(使用关键字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


查看完整回答
反对 回复 2023-03-26
  • 1 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信