MySQL JOIN语法优先级

时间:2012-12-12 11:28:46

标签: 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语法。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果您只需要语法,请执行以下操作:

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