我有一个查询,该查询返回成员,他们的最后访问和最后的付款。我的问题是,没有访问和/或付款,它不会返回会员。

我以前没有包括最后一次访问,然后我用LEFT和RIGHT JOINs而不是INNER进行了查询,但是当我添加访问表时,我得到了som帮助来包括它,但是我们没有注意到我们缺少具有空值的成员造访或付款。

我试过应用左和右联接没有任何运气。
我也尝试添加例如。 “ 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;

关于mysql - SQL连接3个具有空值的表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56990696/

10-11 04:41