希望有人可以提供帮助,因为我很难理解如何正确查询
我有一个 Member 表和一个 Member_Card 表。 Member_Card 有一个“Member”列,因此该卡与一个会员相关联。两个表都有一个 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 不匹配,但他有 2 张关联卡,其中 1 张具有匹配的 LastModifiedDate。第三个是具有与卡片的 LastModifiedDate 相匹配的会员。
感谢SO,我得到了以下查询:
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
效果很好,但缺少会员没有任何关联卡的情况。
我尝试将一些 INNER JOIN 更改为 LEFT JOIN 但随后它忽略了日期比较:-(
你能帮我解决这个问题吗?