繁体   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