我有两张桌子
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.mstype
和members.surname
。
我无法在此获得正确的JOIN语法。
答案 0 :(得分:1)
您将使用以下内容:
select m.surname,
s.mstype
from members m
left join memberships s
on m.memberid = s.memberid
where s.msyear = yourYear
我使用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