根據下面的查詢,您可以看到查詢只返回匹配的行,但我想從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 關注
- 135 瀏覽
添加回答
舉報
0/150
提交
取消