[英]Sql query within an inner join
我有這個mysql語句:
SELECT ca.*, MAX(ca.id), v.*,a.submit_dt from callback_holding ca
inner join valuations v on v.Ref = ca.ref
inner join answer a on a.title = ca.ref
where v.Consultant = '$user' and ca.isholding = 2
GROUP BY ca.ref DESC order by ca.reccomendeddate asc
但是問題是,如果“答案”中沒有條目,則該條目不會顯示在列表中。 如果“答案”表中沒有任何內容,什么才可以帶回所有內容而僅返回“ null”呢?
謝謝
您的查詢有幾個問題。 首先,您要按callback_holding
表中的ref
列進行分組,但不僅要從此表中選擇非聚合列,還要從其他表中選擇非聚合列。 要解決此問題,您應該進行聚合以在子查詢的callback_holding
中找到最大ID,然后將其加入其他表。
接下來,您提到如果找不到答案,則不會獲得任何記錄。 這是INNER JOIN
的本質,但是如果您將INNER JOIN
切換為使用LEFT JOIN
來answer
,那么查詢中直到該點的記錄都不會丟失。 請注意,我使用COALESCE(a.submit_dt, 'NA')
以顯示NA
在事件從答案表該列是NULL
。 如果此datetime
,則應使用適當的默認值,例如NOW()
。
SELECT ca.*,
v.*,
COALESCE(a.submit_dt, 'NA') AS submit_dt, -- display 'NA' if no answer
t.max_id
FROM callback_holding ca
INNER JOIN
(
SELECT ref, MAX(id) AS max_id
FROM callback_holding
GROUP BY ref
) t
ON t.ref = ca.ref AND
t.max_id = ca.id
INNER JOIN valuations v
ON v.Ref = ca.ref
LEFT JOIN answer a
ON a.title = ca.ref
WHERE v.Consultant = '$user' AND
ca.isholding = 2
ORDER BY ca.reccomendeddate
嘗試:
SELECT ca.*, MAX(ca.id), v.*,a.submit_dt from callback_holding ca
INNER join valuations v on v.Ref = ca.ref
LEFT join answer a on a.title = ca.ref
WHERE v.Consultant = '$user' and ca.isholding = 2
GROUP BY ca.ref DESC order by ca.reccomendeddate asc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.