希望有人能为我提供帮助,因为我很难理解如何正确查询
我有一个成员表和一个Member_Card表。Member_Card具有“成员”列,因此卡与成员相关联。两个表都有一个LastModifiedDate列。会员可以没有一张,一张或几张卡。
我需要返回其LastModifiedDate> = sinceDate(给定日期)或其卡(如果有)LastModifiedDate> =sinceDate的所有成员。
LastModifiedDate> = sinceDate
LastModifiedDate> =sinceDate
想象一下,因为日期是2013年1月1日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 }] }]
1st是具有匹配的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,但是随后它忽略了日期比较:-(
你能帮我这个吗?
您想将日期检查移到内部查询的位置。
尝试类似的东西:
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 ) )