mysql - SQL Join 3 个空值的表
问题描述
我有一个查询返回成员、他们的最后一次访问和最后一次付款。我的问题是它不会在没有访问和/或付款的情况下返回成员。
我以前没有包括最后一次访问,然后我使用 LEFT 和 RIGHT JOIN 而不是 INNER 进行了查询,但是当我添加访问表时,我收到了一些帮助来包含它,但我们没有注意到我们缺少具有空值的成员在参观或付款。
我试过应用 LEFT 和 RIGHT JOIN,但没有任何运气。我也尝试添加例如。“OR (pt.member_id IS NULL)”也没有成功。
SELECT
mr.member_id,
mr.name,
mr.tag,
pt.semester,
pt.date,
vt.date,
FROM
members mr
INNER JOIN
payment pt
ON
pt.member_id = mr.member_id
INNER JOIN
( SELECT
member_id,
MAX(payment_id) max_value
FROM
payment
GROUP BY
member_id ) pt2
ON
pt.member_id = pt2.member_id
AND
pt.payment_id = pt2.max_value
INNER JOIN
visit vt
ON
vt.member_id = mr.member_id
INNER JOIN
( SELECT
member_id,
MAX(date) max_visit_value
FROM
visit
GROUP BY
member_id ) vt2
ON
vt.member_id = vt2.member_id
AND
vt.date = vt2.max_visit_value
我想得到一个访问和/或付款可以为空的结果。
我希望我有道理,有人可以帮助我:)
MySQL 5.6
解决方案
以下使用左连接的版本可能会给您想要的结果:
SELECT
mr.member_id,
mr.name,
mr.tag,
pt.semester,
pt.date,
vt.date,
FROM members mr
LEFT JOIN payment pt
ON pt.member_id = mr.member_id
LEFT JOIN
(
SELECT member_id, MAX(payment_id) max_value
FROM payment
GROUP BY member_id
) pt2
ON pt.member_id = pt2.member_id AND pt.payment_id = pt2.max_value
LEFT JOIN visit vt
ON vt.member_id = mr.member_id
LEFT JOIN
(
SELECT member_id, MAX(date) max_visit_value
FROM visit
GROUP BY member_id
) vt2
ON vt.member_id = vt2.member_id AND vt.date = vt2.max_visit_value;
推荐阅读
- python-3.x - Pymongo - 从原始查询的结果中排除字段
- python-3.x - 如何使用特定匹配值基于另一列获取一列的值
- jpa - JPA 不生成 ddl 文件
- oracle - 动态查询中 v_MONTH 的标识符无效错误
- android - 如何捕获图像并裁剪它?
- excel - 在单元格更改时调用公式
- nginx - 如何在生产环境django+static+nginx中提供静态文件,如javascript css图像和pdf
- java - AccessDeniedException 如果使用 Files.find()
- python - 在重新索引 Series 时,值正在变为 NaN
- java - RecyclerView中视图的动态位置