簡體   English   中英

內部聯接內的SQL查詢

[英]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 JOINanswer ,那么查詢中直到該點的記錄都不會丟失。 請注意,我使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM