2013-08-05 145 views
0

我有2个表:Member和Member_Card。 Member_Card有链接到会员ID列列,因此部件具有一对多的关系,以Member_CardMySQL连接表WHERE子句

我输出JSON如:

{ 
    "Name" : "Member Name", 
    "Cards": [ 
      { "Card_No" : "1234"}, 
      { "Card_No" : "4321"} 
     ] 
} 

会员及Member_Card有LastModifiedDate列。

我的查询是这样的:

SELECT Name FROM Member 
LEFT JOIN Member_Card 
    ON Member_Card.Member = Member.id 
WHERE Member.LastModifiedDate >= sinceDate 
    OR Member_Card.LastModifiedDate >= sinceDate 

与此查询的问题是,它只会返回卡因为sinceDate /会员修改(即,如果一个成员有2个卡和一个被修改AFER sinceDate,它将只返回1张卡)。我想返回成员及其所有卡片,不管卡片或成员本身是否在sinceDate后被修改。

我该如何查询?或者我需要运行2个查询?

回答

0
SELECT member.*,c.* 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 c on c.member=a.mid 
+0

感谢队友,我有困难的时候用查询^^ U – momo

+0

可以请你再次帮忙吗?还有的情况下,一个成员没有卡,如果日期匹配,我应该返回成员http://stackoverflow.com/questions/18123218/mysql-left-join-query-with-where-clause – momo