希望有人能帮忙,因为我很难理解如何正确查询
我有会员桌和会员卡桌。成员卡有一个列成员,因此该卡与成员关联。两个表都有一个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/