【发布时间】:2022-07-06 22:25:36
【问题描述】:
旧问题已关闭,并要求提供更多信息,因此我在此处添加了一些输入/输出屏幕截图。
从概念上讲,这似乎是一件简单的事情,但我已经尝试更新查询并且没有运气,所以也许有人可以看到我没有看到的东西。在这段摘录中,为了简洁起见,我更改了表名/别名并删除了几列,但我有以下查询:
SELECT t1.name,
t1.status,
t1.pid,
TIME(date_time) AS time,
t2.channel_name,
chattime,
email_sent,
sms_sent,
SUM(CASE WHEN notes = 'email'
THEN 1
ELSE 0 END) AS email
FROM table1 t1
RIGHT JOIN table3 t3
ON t1.pid = t3.pid
LEFT JOIN table2 t2
ON t2.channel_name = t3.channel_name
GROUP BY t3.channel_name,
t1.pid,
date
ORDER BY t3.id DESC;
基本上我正在做的是从 table3 中提取所有记录,如果 table2 中有相应的记录,则来自 t2 的“chattime”列也会插入到该记录中。表 1 包含与这些条目相关的一些其他信息。
我现在需要做的是更改查询,这样我仍然可以获取所有这些记录,但也可以从 table2 获取每条记录,无论 table3 中是否有匹配的 channel_name 可以加入条目。我不想要重复的条目,所以我的结果集基本上应该是我目前拥有的所有内容,以及尚未与 table3 中的条目关联的所有 table2 记录。
我尝试更新连接并尝试添加 table2.* 选择器,但我还没有找到任何可以解决问题的方法。如果对问题有任何不清楚的地方,请随时告诉我。
编辑
根据要求,我将添加更多有关输入和输出的信息。此查询用于将信息输入到 PHP 页面,输出如下:
以下是所涉及的三个表中的每一个表中的一些记录。我已经从这个截图和上面的截图中省略了名字。上为table1,中为table2,下为table3。
以下是输出页面上的列如何根据来自何处的内容进行布局:
客户端:table1.name PID:table1.pid 日期:table3.date_time 练习电子邮件、号码、区域,让我们打电话给你,表格发送:t3.inquiry_notes(数据库记录每个按钮的点击,查询说明表明它是什么类型的点击,因此我必须按 table3.channel_name 分组才能获取所有内容在输出的一条记录中) 聊天:table2.chattime 发送的电子邮件:table2.email_sent 短信发送:table2.sms_sent
【问题讨论】:
-
mysql 不支持全外连接,需要自己模拟。如果您寻找它,您会找到多种解决方案
-
我看到您对旧版本的评论并尝试使用联合但无法使其正常工作。我必须添加一些空列以避免“列数不等”错误,但这会导致输出中的列丢失。我找不到保留正确输出格式的解决方案。