MYSQL 连接具有相同数据的两个表

MYSQL Join Two tables with same data

我有两个 tables memberalumnialumni table 可以在具有不同 year 字段的多行中具有相同的 member。我想 select 来自 table 的所有数据。 给出的 table 是:

校友:

 id, regd, name,   status,    year

 1    1    kim     inactive   2013
 2    1    kim     inactive   2014
 3    1    kim     inactive   2015 //This is generated for alumni purpose

给出的 table 成员是:

regd, name,   status,    year
 1    kim     Active     2015

预期输出为:

`regd`, `name,`   `status,`    `year`
 1       kim       Active       2015 
 1       kim       inactive     2014 
 1       kim       inactive     2013

如果alumni中没有例如2015年的记录,它仍然会显示alumni中的另一条记录和membertable中的2015年。我正在尝试使用以下 php 和 mysql 语句通过 regd 显示它,但它没有按预期工作。

Mysql:

SELECT m.*, a.* FROM member m 
LEFT JOIN alumni a ON m.regd = a.regd
WHERE m.regd ='1' GROUP BY a.year ORDER BY a.year DESC;

PHP:

foreach($members as member):
echo $member['regd'].' '.$member['year'].'<br>';
endforeach;

错误是,它 select 仅来自 alumni table 的所有数据。我哪里会出错?虽然我没有在这里提供 fiddle,但我希望这能阐明我的观点。请帮助我。

OUTER JOIN MySQL 不支持。

所以你应该这样做:

SELECT res.* FROM (
SELECT 
m.regd, 
m.name, 
COALESCE(m.status, a.status),
m.year,
FROM member m 
LEFT JOIN alumni a 
ON m.regd = a.regd
   AND m.year = a.year
WHERE m.regd ='1' 
UNION
SELECT 
a.regd, 
a.name, 
a.status,
a.year,
FROM member m 
RIGHT JOIN alumni a 
ON m.regd = a.regd
   AND m.year = a.year
WHERE a.regd ='1' 
   AND m.regd IS NULL
) res
ORDER BY res.year DESC