MySQL JOIN 语法优先级

标签 mysql join

我有两张 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.mstypemembers.surname。 我只是无法获得正确的 JOIN 语法。

最佳答案

你将使用这样的东西:

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来返回所有成员,甚至是那些可能没有成员记录的成员。如果成员(member)在成员(member)表中没有记录,则返回null。

如果您需要学习 JOIN 语法的帮助,这里有一个很棒的 visual explanation of joins

关于MySQL JOIN 语法优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13838746/

相关文章:

PHP PDO 准备插入查询。值未传递的问题

python - 连接两个 pandas 数据透视表

php - 我的 PHP 代码中的 SQL 注入(inject)

php - MySQL 如何限制 JOIN 查询的行数仅来自第一个表而不是第二个表?

php - Laravel 4 中的 MySQL/PHP bool 全文搜索问题

PostgreSQL OUTER 连接逻辑

node.js - Sequelize连接和关系

php - 应该如何编写 MySQL 语句将多行合并为单行?

mySQL:连接找不到数据,即使它们存在

PHP/MySQL - 根据表 2 中的计数从表 1 中获取结果