2012-12-12 52 views
0

我有两个表的MySQL JOIN语法优先

members 
+------------+-------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+------------+-------------+------+-----+---------+----------------+ 
| mindex  | smallint(4) | NO | PRI | NULL | auto_increment | 
| memberid | smallint(5) | YES | MUL | NULL |    | 
| forenames | varchar(40) | YES |  | NULL |    | 
| surname | varchar(20) | YES |  | NULL |    | 
| nameprefix | varchar(30) | YES |  | NULL |    | 
| namesuffix | varchar(50) | YES |  | NULL |    | 
| died  | smallint(5) | YES |  | NULL |    | 
| notes  | text  | YES |  | NULL |    | 
+------------+-------------+------+-----+---------+----------------+ 

memberships; 
+------------+-------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+------------+-------------+------+-----+---------+----------------+ 
| mshipindex | smallint(4) | NO | PRI | NULL | auto_increment | 
| memberid | smallint(5) | YES | MUL | NULL |    | 
| msid  | smallint(5) | YES |  | NULL |    | 
| mstype  | varchar(20) | YES |  | NULL |    | 
| msyear  | smallint(5) | YES |  | NULL |    | 
| msposition | varchar(15) | YES |  | NULL |    | 
+------------+-------------+------+-----+---------+----------------+ 

我想在成员搜索年(memberships.msyear),并得到memberships.mstypemembers.surname。 我只是无法得到正确的JOIN语法。

+0

可以使用memeberid作为连接键 –

回答

0

如果你只需要语法在这里:

Select * 
from members m 
inner join membership ms on (m.memberid = ms.memberid) 
where memberships.msyear = 2012 
1

你会使用这样的:

select m.surname, 
    s.mstype 
from members m 
left join memberships s 
    on m.memberid = s.memberid 
where s.msyear = yourYear 

SQL Fiddle with Demo

我用LEFT JOIN返回所有成员,即使那些可能没有会员纪录的人也是如此。如果该成员在成员表中没有记录,则它将返回null。

如果您需要帮助学习JOIN语法,这里是一个伟大的visual explanation of joins