適切にクエリする方法を理解するのに苦労しているので、誰かが助けてくれることを願っています
Member テーブルと Member_Card テーブルがあります。Member_Card には列 Member があるため、カードはメンバーに関連付けられています。どちらのテーブルにも LastModifiedDate 列があります。メンバーは、1 つまたは複数のカードを持つことができます。
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
}]
}]
1 つ目は、LastModifiedDate がカードなしで一致するメンバーです。2 番目は、一致しない LastModifiedDate を持つメンバーですが、2 つのカードが関連付けられており、そのうちの 1 つは一致する LastModifiedDate を持っています。3 つ目は、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 に変更しようとしましたが、日付の比較が無視されています :-(
これを手伝ってくれませんか?