我有两张 table
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 | |
+------------+-------------+------+-----+---------+----------------+
我想搜索一年的成员(member)资格(在 memberships.msyear
中)并获取 memberships.mstype
和 members.surname
。
我只是无法获得正确的 JOIN 语法。
最佳答案
你将使用这样的东西:
select m.surname,
s.mstype
from members m
left join memberships s
on m.memberid = s.memberid
where s.msyear = yourYear
我使用了LEFT JOIN
来返回所有成员,甚至是那些可能没有成员记录的成员。如果成员(member)在成员(member)表中没有记录,则返回null。
如果您需要学习 JOIN 语法的帮助,这里有一个很棒的 visual explanation of joins
关于MySQL JOIN 语法优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13838746/