希望有人能帮忙,因为我很难理解如何正确查询
我有会员桌和会员卡桌。成员卡有一个列成员,因此该卡与成员关联。两个表都有一个LastModifiedDate列。一个会员可以没有,一张或几张卡。
我需要返回其LastModifiedDate>=sinceDate(给定日期)或其卡(如果有)LastModifiedDate>=sinceDate的所有成员。
假设sinceDate是2013-01-01 00:00:00。我想输出如下内容:

[{
    "Id": "001O000000FsAs7IAF",
    "LastModifiedDate": 2013-01-01 00:00:00,
    "Member_Card": null
}, {
    "Id": "001O000000FrpIXIAZ",
    "LastModifiedDate": 2012-12-12 00:00:00,

    "Member_Card": [{
        "Id": "a00O0000002w8FGIAY",
        "Member": "001O000000FhDSoIAN",
        "LastModifiedDate": 2013-01-01 00:00:00

    }, {
        "Id": "a00O0000002uYMtIAM",
        "Member": "001O000000FhDSoIAN",
        "LastModifiedDate": 2012-12-12 00:00:00
    }]
}, {
    "Id": "001O000000FsAg7IAF",
    "LastModifiedDate": 2013-01-01 00:00:00,
    "Member_Card": [{
        "Id": "a00O0000002w8FFIAY",
        "Member": "001O000000FhDSoIAN",
        "LastModifiedDate": 2012-12-12 00:00:00
    }]
}]

第一个成员具有匹配的LastModifiedDate,但没有卡。第二个是具有不匹配的LastModifiedDate的成员,但他有两个关联的卡,其中一个具有匹配的LastModifiedDate。第三个是具有与卡匹配的LastModifiedDate的成员。
多亏如此,我得到了以下问题:
SELECT member.*,card.* from member inner join (
SELECT distinct member.id as  mid FROM Member
INNER JOIN Member_Card
    ON Member_Card.Member = Member.id
and ( Member.LastModifiedDate >= sinceDate
    OR Member_Card.LastModifiedDate >= sinceDate ) ) a on a.mid=member.id
inner join member_card card on card.member=a.mid

它工作正常,但是缺少成员没有关联任何卡的情况。
我试图将一些内部连接更改为左连接,但它忽略了日期比较:-(
你能帮我做这个吗?

最佳答案

要将日期检查移动到内部查询的位置。
尝试以下方法:

SELECT member.*,card.*
FROM member
LEFT JOIN member_card card on card.member=member.id
WHERE member.id IN (
    SELECT DISTINCT m.id FROM Member m
        LEFT JOIN Member_Card mc ON (mc.Member = m.id)
        WHERE ( m.LastModifiedDate >= sinceDate
        OR mc.LastModifiedDate >= sinceDate )
)

关于mysql - 使用WHERE子句的MySQL LEFT JOIN查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18123218/

10-08 20:50